1018 锤子剪刀布 (20 分)

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

FigCJB.jpg

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

输入格式:

输入第 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<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 using namespace std;
 7 bool cmp(int a,int b)
 8 {
 9     return a>b;
10 }
11 int change(char a)
12 {
13     if(a=='B')return 0;
14     if(a=='C')return 1;
15     if(a=='J')return 2;
16 }
17 int main()
18 {
19     int n;
20     cin>>n;
21     char mp[3]={'B','C','J'};
22     int a[10009],b[10009];
23     char s1,s2;
24     int win[3]={0},hand1[3]={0},hand2[3]={0};
25     for(int i=0;i<n;i++)
26     {
27         cin>>s1>>s2;
28         a[i]=change(s1);
29         b[i]=change(s2);
30         if((a[i]+1)%3==b[i])
31        {
32            win[0]++;
33            hand1[a[i]]++;
34        }
35        else if(a[i]==b[i])
36         win[1]++;
37        else
38        {
39            win[2]++;
40            hand2[b[i]]++;
41        }
42     }
43     printf("%d %d %d
",win[0],win[1],win[2]);
44     printf("%d %d %d
",win[2],win[1],win[0]);
45     int i1=0,i2=0;
46     for(int i=0;i<3;i++)
47     {
48         if(hand1[i]>hand1[i1])i1=i;
49         if(hand2[i]>hand2[i2])i2=i;
50     }
51     printf("%c %c",mp[i1],mp[i2]);
52 
53 
54 }

第一次:(我自己写的自己都看不懂emmm)

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<stdlib.h>
 4 #include<cstring>
 5 using namespace std;
 6 int main()
 7 {
 8     int n,flag[3]={0},flagm1[3]={0},flagm2[3]={0};
 9     char a[10000],b[10000],m[3]={'J','B','C'};
10     cin>>n;
11     for(int i=0;i<n;i++)
12     {
13        cin>>a[i]>>b[i];
14        int x=a[i]-b[i];
15        if(x==0)
16          flag[1]++;
17        else if(x<0||x==8)
18        {
19            flag[0]++;
20            if(a[i]==m[0])
21             flagm1[0]++;
22             else if(a[i]==m[1])
23                 flagm1[1]++;
24             else
25                 flagm1[2]++;
26        }
27        else
28        {
29            flag[2]++;
30            if(b[i]==m[0])
31            {
32                flagm2[0]++;
33            }
34 
35             else if(b[i]==m[1])
36             {
37                 flagm2[1]++;
38             }
39             else
40                 flagm2[2]++;
41        }
42 
43     }
44     cout<<flag[0]<<" "<<flag[1]<<" "<<flag[2]<<endl;
45     cout<<flag[2]<<" "<<flag[1]<<" "<<flag[0]<<endl;
46      cout<<flagm1[0]<<" "<<flagm1[1]<<" "<<flagm1[2]<<endl;
47     if(flagm1[0]>flagm1[1]&&flagm1[0]>flagm1[2])
48         cout<<m[0]<<" ";
49     else if(flagm1[1]>flagm1[0]&&flagm1[1]>flagm1[2])
50     {
51         cout<<m[1]<<" ";
52     }
53     else
54         cout<<m[2]<<" ";
55 
56     if(flagm2[0]>flagm2[1]&&flagm2[0]>flagm2[2])
57     {
58         cout<<m[0]<<endl;
59     }
60 
61     else if(flagm2[1]>flagm2[0]&&flagm2[1]>flagm2[2])
62     {
63         cout<<m[1]<<endl;
64     }
65     else
66     {
67         cout<<m[2]<<endl;
68  //       cout<<flagm2[0]<<" "<<flagm2[1]<<" "<<flagm2[2]<<endl;
69     }
70 
71 
72 }

网上找的题解:太佩服了,感觉比算法笔记上的还要简单清晰

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int win[3] = {0};
 6 
 7 char max3(int *a) {
 8 
 9     char r = 'B';
10 
11     if(a[1] > a[0]) {
12 
13         a[0] = a[1];
14 
15         r = 'C';
16 
17     }
18 
19     if(a[2] > a[0]) r = 'J';
20 
21     return r;
22 
23 }
24 
25 int main() {
26 
27     int n;
28 
29     char a[105],b[105];
30 
31     int awin[3] = {0};
32 
33     int bwin[3] = {0};
34 
35     cin >> n;
36 
37     for(int i = 0; i < n; i++) {
38 
39         cin >> a[i] >> b[i];
40 
41         int k = (a[i] - b[i]) * (a[i] - b[i]);
42 
43         if(k == 1)
44 
45             a[i] == 66 ? win[0]++,awin[0]++ : (win[1]++,bwin[0]++);
46 
47         else if(k == 49)
48 
49             a[i] == 67 ? win[0]++,awin[1]++ : (win[1]++,bwin[1]++);
50 
51         else if(k == 64)
52 
53             a[i] == 74 ? win[0]++,awin[2]++ : (win[1]++,bwin[2]++);
54 
55         else
56 
57             win[2]++;
58 
59     }
60 
61     cout << win[0] << " " << win[2] << " " << win[1] << endl;
62 
63     cout << win[1] << " " << win[2] << " " << win[0] << endl;
64 
65     cout << max3(awin) << " " << max3(bwin);
66 
67     return 0;
68 
69 }
原文地址:https://www.cnblogs.com/ygjojo/p/10753155.html