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>
#include<string.h>  
int main(){
    int num,i,draw=0,A_winsC=0,A_winsJ=0,A_winsB=0,B_winsC=0,B_winsJ=0,B_winsB=0;
    int AW=0,AF=0,BW=0,BF=0;
    char c1,c2;
    scanf("%d",&num);
    for
(i=0;i<num;i++){ scanf(" %c %c",&c1,&c2); if(c1==c2){ draw++; }else if(c1=='C'&c2=='J'){ A_winsC++; }else if(c1=='J'&c2=='B'){ A_winsJ++; }else if(c1=='B'&c2=='C'){ A_winsB++; }else if
(c2=='C'&c1=='J'){ B_winsC++; }else if(c2=='J'&c1=='B'){ B_winsJ++; }else if(c2=='B'&c1=='C'){ B_winsB++; } } AW=A_winsC+A_winsJ+A_winsB; AF=num-draw-AW; BW=B_winsC+B_winsJ+B_winsB; BF=num-draw-BW; printf("%d %d %d\n",AW,draw,AF); printf("%d %d %d\n",BW,draw,BF); //printf("%d %d %d\n",A_winsC,A_winsJ,A_winsB); if(A_winsC>=A_winsJ&&A_winsC>A_winsB){ printf("%c ",'C'); }else if(A_winsJ>A_winsB){ printf("%c ",'J'); }else{ printf("%c ",'B'); } if(B_winsC>=A_winsJ&&B_winsC>A_winsB){ printf("%c",'C'); }else if(B_winsJ>B_winsB){ printf("%c",'J'); }else{ printf("%c",'B'); } return 0; }

總結:
1、簡單的邏輯判斷.
2、細節決定成敗,一開始做的時候沒有看到最後一句“如果解不唯一,則輸出按字母序最小的解”所以要注意判斷的條件,但是把相等的情況單獨寫出來比較麻煩,所以要注意判斷的條件。