C _ PAT B1018 錘子剪刀布
阿新 • • 發佈:2021-01-09
技術標籤:C _ PAT Basic Level
題目描述:
大家應該都會玩“錘子剪刀布”的遊戲:兩人同時給出手勢,勝負規則如圖所示:
現給出兩人的交鋒記錄,請統計雙方的勝、平、負次數,並且給出雙方分別出什麼手勢的勝算最大。
輸入格式:
輸入第 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>
int main() {
int n, i, j, temp, max;
int record[2][3] = {0}, gesture[2], winGesture[2][3] = {0};
char c;
scanf("%d", &n);
getchar();
for (i = 0; i < n; i++ ) {
for (j = 0; j < 2; j++) {
scanf("%c", &c);
getchar();
switch (c) {
case 'B':
gesture[j] = 0;
break;
case 'C':
gesture[j] = 1;
break ;
case 'J':
gesture[j] = 2;
break;
}
}
temp = gesture[0] - gesture[1];
if (temp == -1 || temp == 2) { //甲勝乙負
record[0][0]++;
record[1][2]++;
winGesture[0][gesture[0]]++;
} else if (temp == 1 || temp == -2) { //乙勝甲負
record[0][2]++;
record[1][0]++;
winGesture[1][gesture[1]]++;
} else { //平局
record[0][1]++;
record[1][1]++;
}
}
for (i = 0; i < 2; i++)
printf("%d %d %d\n", record[i][0], record[i][1], record[i][2]);
for (i = 0; i < 2; i++) {
max = 0;
for (j = 1; j < 3; j++)
if (winGesture[i][max] < winGesture[i][j]) max = j;
switch (max) {
case 0:
printf("B");
break;
case 1:
printf("C");
break;
case 2:
printf("J");
break;
}
printf("%c", i ? '\n' : ' ');
}
return 0;
}