1. 程式人生 > >PAT 乙級 1018. 錘子剪刀布(C語言版)

PAT 乙級 1018. 錘子剪刀布(C語言版)

大家應該都會玩“錘子剪刀布”的遊戲:兩人同時給出手勢,勝負規則如圖所示:

現給出兩人的交鋒記錄,請統計雙方的勝、平、負次數,並且給出雙方分別出什麼手勢的勝算最大。

輸入格式:

輸入第1行給出正整數N(<=105),即雙方交鋒的次數。隨後N行,每行給出一次交鋒的資訊,即甲、乙雙方同時給出的的手勢。C代表“錘子”、J代表“剪刀”、B代表“布”,第1個字母代表甲方,第2個代表乙方,中間有1個空格。

輸出格式:

輸出第1、2行分別給出甲、乙的勝、平、負次數,數字間以1個空格分隔。第3行給出兩個字母,分別代表甲、乙獲勝次數最多的手勢,中間有1個空格。如果解不唯一,則輸出按字母序最小的解。

輸入樣例:
10
C J
J B
C B
B B
B C
C C
C B
J B
B C
J J
輸出樣例:
5 3 2
2 3 5
B B

#include <stdio.h>
char judge(int j,int b,int c);
int main(){
    //  Ascii碼為索引,二維陣列 
    int array['Z'+1]['Z'+1] = {0};//橫向代表甲,縱向代表乙 
    int num,cnt;
    char jia,yi;
    scanf("%d",&num);
    int t = num; //t記住Num,下面減去贏的次數得到平局次數。 
    while(num != 0 && scanf("\n%c %c",&jia,&yi) != EOF){
    //  fflush(stdin);
// scanf("%c %c",&jia,&yi); array[jia][yi]++; cnt++; if(cnt == num){ break; } } int win_j = array['J']['B']+array['C']['J']+array['B']['C']; int win_y = array['B']['J']+array['J']['C']+array['C']['B']; int ping = t - win_j- win_y; printf
("%d %d %d\n",win_j,ping,win_y); printf("%d %d %d\n",win_y,ping,win_j); char j = judge(array['J']['B'],array['B']['C'],array['C']['J']); char y = judge(array['B']['J'],array['C']['B'],array['J']['C']); printf("%c %c",j,y); } char judge(int j,int b,int c){ int ret = 0 ,r = j; if(j <= c){ ret = 1; r = c; } if( r <= b){ ret = 2; } if(ret == 0)return 'J'; if(ret == 1)return 'C'; if(ret == 2)return 'B'; }