zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    box-sizing
    js词法作用域
    焦点轮播图
    绑定事件统一方法
    自动展示收起广告功能
    使用js实现瀑布流
    回到顶部效果
    电商网站的放大镜功能
    CSS清除浮动
    CSS的水平居中和垂直居中方式
  • 原文地址:https://www.cnblogs.com/ygjojo/p/10753155.html
Copyright © 2011-2022 走看看