傳送門
https://pintia.cn/problem-sets/994805260223102976/problems/994805304020025344
題目
大家應(yīng)該都會玩“錘子剪刀布”的游戲:兩人同時給出手勢,勝負(fù)規(guī)則如圖所示:
現(xiàn)給出兩人的交鋒記錄,請統(tǒng)計雙方的勝、平、負(fù)次數(shù),并且給出雙方分別出什么手勢的勝算最大。
輸入格式:
輸入第1行給出正整數(shù)N(<=105),即雙方交鋒的次數(shù)。隨后N行,每行給出一次交鋒的信息,即甲、乙雙方同時給出的的手勢。C代表“錘子”、J代表“剪刀”、B代表“布”,第1個字母代表甲方,第2個代表乙方,中間有1個空格。
輸出格式:
輸出第1、2行分別給出甲、乙的勝、平、負(fù)次數(shù),數(shù)字間以1個空格分隔。第3行給出兩個字母,分別代表甲、乙獲勝次數(shù)最多的手勢,中間有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
分析
一共有9種情況,全部考慮到就可以,另外甲勝=乙負(fù),甲負(fù)=乙勝,平局情況相同,可以節(jié)省幾個變量。
遇到的坑:
使用scanf讀取有效字符時一定要在前面加空格,因為:對于scanf()而言,%c是個較為特殊的說明符。 %c前沒空格,scanf()將讀取標(biāo)準(zhǔn)輸入流中的第一個字符,%c前有空格,scanf()則讀取標(biāo)準(zhǔn)輸入流中第一個非空白字符。
源代碼
//C/C++實現(xiàn)
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
int jiaWin = 0, jiaLose = 0, draw = 0;
int jiaJWin = 0, jiaCWin = 0, jiaBWin = 0;
int yiJWin = 0, yiCWin = 0, yiBWin = 0;
char jia, yi;
for(int i = 0; i < n; i++){
scanf(" %c %c", &jia, &yi);
if(jia == 'C'){
if(yi == 'C'){
draw++;
}
else if(yi == 'J'){
jiaWin++;
jiaCWin++;
}
else if(yi == 'B'){
jiaLose++;
yiBWin++;
}
}
else if(jia == 'J'){
if(yi == 'C'){
jiaLose++;
yiCWin++;
}
else if(yi == 'J'){
draw++;
}
else if(yi == 'B'){
jiaWin++;
jiaJWin++;
}
}
else if(jia == 'B'){
if(yi == 'C'){
jiaWin++;
jiaBWin++;
}
else if(yi == 'J'){
jiaLose++;
yiJWin++;
}
else if(yi == 'B'){
draw++;
}
}
}
printf("%d %d %d\n", jiaWin, draw, jiaLose);
printf("%d %d %d\n", jiaLose, draw, jiaWin);
printf("%c ", jiaBWin >= jiaCWin ? (jiaBWin >= jiaJWin ? 'B' : 'J') : (jiaCWin >= jiaJWin ? 'C' : 'J'));
printf("%c\n", yiBWin >= yiCWin ? (yiBWin >= yiJWin ? 'B' : 'J') : (yiCWin >= yiJWin ? 'C' : 'J'));
return 0;
}