PAT考試乙級1018(C語言實現)
阿新 • • 發佈:2019-01-04
大家應該都會玩“錘子剪刀布”的遊戲:兩人同時給出手勢,勝負規則如圖所示:
現給出兩人的交鋒記錄,請統計雙方的勝、平、負次數,並且給出雙方分別出什麼手勢的勝算最大。
輸入格式:
輸入第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、細節決定成敗,一開始做的時候沒有看到最後一句“如果解不唯一,則輸出按字母序最小的解”所以要注意判斷的條件,但是把相等的情況單獨寫出來比較麻煩,所以要注意判斷的條件。