PAT 乙級 1018.錘子剪刀布
阿新 • • 發佈:2019-01-22
大家應該都會玩“錘子剪刀布”的遊戲:兩人同時給出手勢,勝負規則如圖所示:
現給出兩人的交鋒記錄,請統計雙方的勝、平、負次數,並且給出雙方分別出什麼手勢的勝算最大。
輸入格式:
輸入第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
解題思路
只要輸入的時候邊統計一下當前這一局是誰贏了,記錄贏的那個人出的是什麼,我的程式碼中統計的是a贏的次數,很容易可以知道,a贏就是b輸,反之亦然,最後比較一下兩個人贏的時候分別出的那種手勢最多然後輸出即可,但注意的是若相同的時候要按字典序小的輸出。
程式碼
#include <cstdio>
int main(){
int n,s=0,f=0,p=0,ac=0,aj=0,ab=0,bc=0,bj=0,bb=0;
char a[2],b[2];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%s%s",a,b);
if((a[0]=='C'&&b[0]=='J')||(a[0]=='J'&&b[0]=='B')||(a[0]=='B'&&b[0]=='C')){
//a勝利的情況
s++;
if(a[0]=='C')ac++;
if (a[0]=='B')ab++;
if(a[0]=='J')aj++;
}
else if((a[0]=='C'&&b[0]=='C')||(a[0]=='J'&&b[0]=='J')||(a[0]=='B'&&b[0]=='B')){
//平局
p++;
}else {
//a輸了
f++;
if(b[0]=='C')bc++;
if(b[0]=='B')bb++;
if(b[0]=='J')bj++;
}
}
printf("%d %d %d\n%d %d %d\n",s,p,f,f,p,s);
printf("%c %c",((ac>ab&&ac>=aj)?'C':(ab>=aj?'B':'J')),(bc>bb&&bc>=bj)?'C':(bb>=bj?'B':'J'));
return 0;
}