大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
输入格式:
输入第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
提交代码:
1 #include <stdio.h> 2 3 // 0: 平,1:甲胜,2:乙胜 4 int calc_winner(int a, int b) 5 { 6 if(a == b) 7 return 0; 8 9 if((a == 'J' && b == 'B') || (a == 'C' && b == 'J') || (a == 'B' && b == 'C')) 10 return 1; 11 12 return 2; 13 } 14 15 char max_c_j_b(int c, int j, int b) 16 { 17 int tmp; 18 19 tmp = (c >= j) ? c : j; 20 tmp = (b >= tmp) ? b : tmp; 21 22 if(tmp == b) 23 return 'B'; 24 else if(tmp == c) 25 return 'C'; 26 else 27 return 'J'; 28 } 29 30 int main(void) 31 { 32 int cnt; 33 char a, b; 34 int i, tmp; 35 int a_C, a_J, a_B; 36 int b_C, b_J, b_B; 37 int a_win, a_draw, a_lose; 38 39 scanf("%d", &cnt); 40 41 getchar(); 42 43 a_C = a_J = a_B = 0; 44 b_C = b_J = b_B = 0; 45 a_win = a_draw = a_lose = 0; 46 47 for(i = 0; i < cnt; i++) 48 { 49 scanf("%c %c", &a, &b); 50 getchar(); 51 tmp = calc_winner(a, b); 52 if(tmp == 0) 53 { 54 a_draw += 1; 55 } 56 else if(tmp == 1) 57 { 58 a_win += 1; 59 60 if(a == 'C') 61 a_C += 1; 62 else if(a == 'J') 63 a_J += 1; 64 else 65 a_B += 1; 66 } 67 else 68 { 69 a_lose += 1; 70 71 if(b == 'C') 72 b_C += 1; 73 else if(b == 'J') 74 b_J += 1; 75 else 76 b_B += 1; 77 } 78 } 79 80 printf("%d %d %d ", a_win, a_draw, a_lose); 81 printf("%d %d %d ", a_lose, a_draw, a_win); 82 83 printf("%c %c", max_c_j_b(a_C, a_J, a_B), max_c_j_b(b_C, b_J, b_B)); 84 return 0; 85 }