锤子剪刀布 (20)

来源:互联网 发布:js json转换对象 编辑:程序博客网 时间:2024/04/30 12:16

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

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

输入格式:

输入第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
//需要注意的是,如果甲或乙都没有赢一场比赛,则输出B(升序输出)
#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
int Return(char a)//甲乙对局以数组形式判断胜利。输入返回数组对应的行与列
{
switch(a)
{
case 'C':return 0;
case 'J':return 1;
case 'B':return 2;
}
}
char WinReturn(string a)//扫描甲乙获胜的出法,如果相同输出升序最高
{
int countC=0,countJ=0,countB=0;
for(int i=0;i<a.length();i++)
{
if(a[i]=='C')
countC++;
else if(a[i]=='J')
countJ++;
else
countB++;
}
if(countB>=countC && countB>=countJ && countB>=0)
return 'B';
else if(countC>=countB &&countC>=countJ && countC>=0)
return 'C';
else //if(countJ>=countB &&countJ>=countC && countJ>0)
return 'J';
// else
// return ;
}
int main()
{
int game[3][3]={0,1,-1,
-1,0,1,
1,-1,0};
int n,i=0;
cin>>n;
int jia[3]={0};
int yi[3]={0};
string jia_win="",yi_win="";//存放甲乙获胜出法
char a,b;
for(i=0;i<n;i++)
{
cin>>a>>b;
if(game[Return(a)][Return(b)]==1)
{
jia[0]++;
yi[2]++;
jia_win+=a;
}
else if(game[Return(a)][Return(b)]==-1)
{
jia[2]++;
yi[0]++;
yi_win+=b;
}
else
{
jia[1]++;
yi[1]++;
}
}
for(i=0;i<3;i++)
{
cout<<jia[i];
if(i+1==3)
cout<<endl;
else
cout<<" ";
}
for(i=0;i<3;i++)
{
cout<<yi[i];
if(i+1==3)
cout<<endl;
else
cout<<" ";
}
    //cout<<jia_win<<" " <<yi_win<<endl; 
cout<<WinReturn(jia_win)<<" "<<WinReturn(yi_win);
return 0;
}