傳送門(mén)
https://pintia.cn/problem-sets/994805260223102976/problems/994805304020025344
題目
大家應(yīng)該都會(huì)玩“錘子剪刀布”的游戲:兩人同時(shí)給出手勢(shì),勝負(fù)規(guī)則如圖所示:
現(xiàn)給出兩人的交鋒記錄,請(qǐng)統(tǒng)計(jì)雙方的勝谆甜、平晶密、負(fù)次數(shù),并且給出雙方分別出什么手勢(shì)的勝算最大崩哩。
輸入格式:
輸入第1行給出正整數(shù)N(<=105),即雙方交鋒的次數(shù)。隨后N行暮顺,每行給出一次交鋒的信息,即甲秀存、乙雙方同時(shí)給出的的手勢(shì)捶码。C代表“錘子”、J代表“剪刀”或链、B代表“布”惫恼,第1個(gè)字母代表甲方,第2個(gè)代表乙方澳盐,中間有1個(gè)空格祈纯。
輸出格式:
輸出第1、2行分別給出甲洞就、乙的勝盆繁、平、負(fù)次數(shù)旬蟋,數(shù)字間以1個(gè)空格分隔油昂。第3行給出兩個(gè)字母,分別代表甲、乙獲勝次數(shù)最多的手勢(shì)冕碟,中間有1個(gè)空格拦惋。如果解不唯一,則輸出按字母序最小的解安寺。
輸入樣例:
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é)省幾個(gè)變量迎捺。
遇到的坑:
使用scanf讀取有效字符時(shí)一定要在前面加空格举畸,因?yàn)椋?strong>對(duì)于scanf()而言,%c是個(gè)較為特殊的說(shuō)明符凳枝。 %c前沒(méi)空格抄沮,scanf()將讀取標(biāo)準(zhǔn)輸入流中的第一個(gè)字符,%c前有空格岖瑰,scanf()則讀取標(biāo)準(zhǔn)輸入流中第一個(gè)非空白字符叛买。
源代碼
//C/C++實(shí)現(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;
}