1018 锤子剪刀布 (20 分)
题目: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
思路:
- 枚举一下结果,然后按要求输出。
代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <sstream> 5 #include <cmath> 6 #include <algorithm> 7 #include <string> 8 #include <stack> 9 #include <queue> 10 #include <vector> 11 #include <map> 12 using namespace std; 13 14 int main() 15 { 16 int win = 0, p = 0, fu = 0; 17 int c1 = 0, b1 = 0, j1 = 0; 18 int c2 = 0, b2 = 0, j2 = 0; 19 char a, b; 20 int n; 21 scanf("%d", &n); 22 while(n--) 23 { 24 cin >> a >> b; 25 if(a == 'C' && b == 'J') 26 { 27 win++; 28 c1++; 29 } 30 else if(a == 'J' && b == 'C') 31 { 32 fu++; 33 c2++; 34 } 35 else if(a == 'J' && b == 'B') 36 { 37 win++; 38 j1++; 39 } 40 else if(a == 'B' && b == 'J') 41 { 42 fu++; 43 j2++; 44 } 45 else if(a == 'B' && b == 'C') 46 { 47 win++; 48 b1++; 49 } 50 else if(a == 'C' && b == 'B') 51 { 52 fu++; 53 b2++; 54 } 55 else if(a == b) 56 p++; 57 } 58 printf("%d %d %d\n", win, p, fu); 59 printf("%d %d %d\n", fu, p, win); 60 int max1 = max(c1, max(b1, j1)); 61 int max2 = max(c2, max(b2, j2)); 62 if(max1 == b1) 63 printf("B "); 64 else if(max1 == c1) 65 printf("C "); 66 else if(max1 == j1) 67 printf("J "); 68 if(max2 == b2) 69 printf("B"); 70 else if(max2 == c2) 71 printf("C"); 72 else if(max2 == j2) 73 printf("J"); 74 return 0; 75 }
总结:
如果想要符合某个if条件后不在进入其他语句进行判断,就不能用连续的if,而应当if和else if连用。