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

現給出兩人的交鋒記錄,請統計雙方的勝、平、負次數,并且給出雙方分别出什麼手勢的勝算最大。
輸入格式:
輸入第 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<cstdio>
int change(char c){
if(c == 'B') return 0;
if(c == 'C') return 1;
if(c == 'J') return 2;
}
int main(){
int n;
scanf("%d",&n);
int timea[3] = {0},timeb[3] = {0}; //012分别代表 勝 平 負
int handa[3] = {0},handb[3] = {0}; //012分别代表出剪刀 石頭 布
char mp[3] = {'B','C','J'};
for(int i = 0;i < n;i++){
char a,b;
getchar();
scanf("%c %c",&a,&b);
int k1,k2;
k1 = change(a);
k2 = change(b);
if((k1 + 1)%3 == k2){ //甲赢
timea[0]++;
timeb[2]++;
handa[k1]++;
}else if(k1 == k2){
timea[1]++;
timeb[1]++;
}else{
timea[2]++;
timeb[0]++;
handb[k2]++;
}
}
printf("%d %d %d\n",timea[0],timea[1],timea[2]);
printf("%d %d %d\n",timeb[0],timeb[1],timeb[2]);
int id1 = 0,id2 = 0;
for(int i = 0;i < 3;i++){
if(handa[i] > handa[id1]) id1 = i;
if(handb[i] > handb[id2]) id2 = i;
}
printf("%c %c",mp[id1],mp[id2]);
return 0;
}