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 }
  • 相关阅读:
    【HDOJ】2774 Shuffle
    【POJ】2170 Lattice Animals
    【POJ】1084 Square Destroyer
    【POJ】3523 The Morning after Halloween
    【POJ】3134 Power Calculus
    【Latex】如何在Latex中插入伪代码 —— clrscode3e
    【HDOJ】4801 Pocket Cube 的几种解法和优化
    【HDOJ】4080 Stammering Aliens
    【HDOJ】1800 Flying to the Mars
    SQL语法
  • 原文地址:https://www.cnblogs.com/ygjojo/p/10753155.html
Copyright © 2011-2022 走看看