1018 錘子剪刀布 (20 分)
阿新 • • 發佈:2018-12-13
1018 錘子剪刀布 (20 分)
大家應該都會玩“錘子剪刀布”的遊戲:兩人同時給出手勢,勝負規則如圖所示:
現給出兩人的交鋒記錄,請統計雙方的勝、平、負次數,並且給出雙方分別出什麼手勢的勝算最大。
輸入格式:
輸入第 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 sum(int an[3][3], int n) { return an[0][n]+an[1][n]+an[2][n]; } void res(int h[3][3]) { if(h[1][0]>h[0][0] && h[1][0]>h[2][0]) { printf("J"); } else if(h[0][0]>h[2][0]) { printf("C"); } else { printf("B"); } } int main() { int N; scanf("%d", &N); int a[3][3] = {0}, b[3][3] = {0}; //C 代表“錘子”(0)、J 代表“剪刀”(1)、B 代表“布”(2);勝(1)、平(0)、負(2) char A , B; while(N) { getchar(); scanf("%c %c", &A, &B); if(A == 'C') { if(B == 'C') { a[0][1]++; b[0][1]++; } else if(B == 'J') { a[0][0]++; b[1][2]++; } else { a[0][2]++; b[2][0]++; } } else if(A == 'J') { if(B == 'C') { a[1][2]++; b[0][0]++; } else if(B == 'J') { a[1][1]++; b[1][1]++; } else { a[1][0]++; b[2][2]++; } } else { if(B == 'C') { a[2][0]++; b[0][2]++; } else if(B == 'J') { a[2][2]++; b[1][0]++; } else { a[2][1]++; b[2][1]++; } } N--; } printf("%d %d %d\n", sum(a, 0), sum(a, 1), sum(a, 2)); printf("%d %d %d\n", sum(b, 0), sum(b, 1), sum(b, 2)); res(a); printf(" "); res(b); return 0; }