PAT 乙級 1018. 錘子剪刀布(C語言版)
阿新 • • 發佈:2019-02-13
大家應該都會玩“錘子剪刀布”的遊戲:兩人同時給出手勢,勝負規則如圖所示:
現給出兩人的交鋒記錄,請統計雙方的勝、平、負次數,並且給出雙方分別出什麼手勢的勝算最大。
輸入格式:
輸入第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>
char judge(int j,int b,int c);
int main(){
// Ascii碼為索引,二維陣列
int array['Z'+1]['Z'+1] = {0};//橫向代表甲,縱向代表乙
int num,cnt;
char jia,yi;
scanf("%d",&num);
int t = num; //t記住Num,下面減去贏的次數得到平局次數。
while(num != 0 && scanf("\n%c %c",&jia,&yi) != EOF){
// fflush(stdin);
// scanf("%c %c",&jia,&yi);
array[jia][yi]++;
cnt++;
if(cnt == num){
break;
}
}
int win_j = array['J']['B']+array['C']['J']+array['B']['C'];
int win_y = array['B']['J']+array['J']['C']+array['C']['B'];
int ping = t - win_j- win_y;
printf ("%d %d %d\n",win_j,ping,win_y);
printf("%d %d %d\n",win_y,ping,win_j);
char j = judge(array['J']['B'],array['B']['C'],array['C']['J']);
char y = judge(array['B']['J'],array['C']['B'],array['J']['C']);
printf("%c %c",j,y);
}
char judge(int j,int b,int c){
int ret = 0 ,r = j;
if(j <= c){
ret = 1;
r = c;
}
if( r <= b){
ret = 2;
}
if(ret == 0)return 'J';
if(ret == 1)return 'C';
if(ret == 2)return 'B';
}