1018 锤子剪刀布

来源:互联网 发布:手机测光表软件 编辑:程序博客网 时间:2024/04/30 08:55

题目信息:

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


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

输入格式:

输入第1行给出正整数N(<=105),即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C代表“锤子”、J代表“剪刀”、B代表“布”,第1个字母代表甲方,第2个代表乙方,中间有1个空格。

输出格式:

输出第1、2行分别给出甲、乙的胜、平、负次数,数字间以1个空格分隔。第3行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有1个空格。如果解不唯一,则输出按字母序最小的解。

输入样例:
10C JJ BC BB BB CC CC BJ BB CJ J
输出样例:
5 3 22 3 5B B
代码:

#include <iostream>#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <cctype>using namespace std;int n;char str1[100000],str2[100000];int cmp(int &x,int &y,int &z){ if(x>=y)if(x>=z)return x;else return z;else return y;}void solve(){int m1=0,m2=0,m3=0;int n1=0,n2=0,n3=0;int mm1=0,mm2=0,mm3=0;int nn1=0,nn2=0,nn3=0;for(int i=0;i<n;i++){       if(str1[i]=='B'&&str2[i]=='J')   {   m3++;   nn3++;   }   if(str1[i]=='B'&&str2[i]=='C')   {   m1++;   mm1++;   }   if(str1[i]=='B'&&str2[i]=='B')   m2++;   if(str1[i]=='J'&&str2[i]=='C')   {   m3++;   nn2++;   }   if(str1[i]=='J'&&str2[i]=='B')   {   m1++;   mm3++;   }   if(str1[i]=='J'&&str2[i]=='J')   m2++;   if(str1[i]=='C'&&str2[i]=='B')   {   m3++;   nn1++;   }   if(str1[i]=='C'&&str2[i]=='J'){m1++;mm2++;}    if(str1[i]=='C'&&str2[i]=='C')m2++;}n1=m3;n2=m2;n3=m1;cout<<m1<<" "<<m2<<" "<<m3<<endl;cout<<n1<<" "<<n2<<" "<<n3<<endl;int ma1=0,ma2=0;ma1=cmp(mm1,mm2,mm3);ma2=cmp(nn1,nn2,nn3);if(ma1==mm1)cout<<'B'<<" ";else if(ma1==mm2)    cout<<'C'<< " ";else cout<<'J'<<" ";if(ma2==nn1)cout<<'B'<<endl;else if(ma2==nn2)cout<<'C'<<endl;else     cout<<'J'<<endl;}int main(){cin >> n;for (int i=0;i<n;i++){cin>>str1[i]>>str2[i];}solve(); return 0;}
分析:这题主要是猜拳游戏结果的统计,定义各个变量再循环遍历每次猜拳双方,记录双方赢输平局次数,重点是赢的时候出拳的类型,

         统计好了以后,就是输出统计结果,过程中需要判断大小,输出最大值(相同情况下输出字母序号小的)。

0 0
原创粉丝点击