PAT (Basic Level) Practise:1018. 锤子剪刀布

【题目链接】

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:

现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。

输入格式:

输入第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 }
原文地址:https://www.cnblogs.com/utank/p/4755098.html