PAT锤子剪刀布

原题地址
题目描述
大家应该都会玩“锤子剪刀布”的游戏:
现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。

输入描述:
输入第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

这里就是强调一下该语句

map<char,map<char , bool > >ma;

它表示的就是二维map两个char 键值指向bool数据,同理其他二维map使用时键值为第一个第二个为嵌套的map中第一个键值而最终指向的数据则是最后一个嵌套的最后一个数据类型

由该性质还可以尽力跟多层的map 嵌套只要记住最后指向的数据是最后一个嵌套map的第二个数据类型就行

#include<iostream>
#include<string>
#include<map>
#include<vector>
using namespace std;
map<char ,map<char , bool > >ma;
struct G{
	int win;
	int tie;
	int defeat;
	int c,j,b;
	
}a,b;
int main(){
	//freopen("qwe.txt","r",stdin);
   int k;
   cin>>k;
   
   
   ma['J']['B']=true;
   ma['J']['C']=false;
   ma['B']['J']=false;
   ma['B']['C']=true;
   ma['C']['J']=true;
   ma['C']['B']=false;
   for(int i=1;i<=k;i++)
   {
   	char q,w;
   	cin>>q>>w;
   	if(q==w)
   	{
   		a.tie++;
   		b.tie++;
   	continue;	
	   }
	   if(ma[q][w])
	   {
	   	a.win++;
	   	b.defeat++;
	   	if(q=='C') a.c++;
	   	else if(q=='B') a.b++;
	   	else a.j++;
	   	
	   }
	   else {
	   	b.win++;
	   	a.defeat++;
	   	if(w=='C') b.c++;
	   	else if(w=='B') b.b++;
	   	else b.j++;
	   }
   		
   		
	   
   	
   	
   }
cout<<a.win<<" "<<a.tie<<" "<<a.defeat<<endl;
cout<<b.win<<" "<<b.tie<<" "<<b.defeat<<endl;
char A,B;
int maxn;
maxn=a.b;
A='B';
if(a.c>maxn)
{
	maxn=a.c;
	A='C';
	}	
	if(a.j>maxn)
	A='J';

maxn=b.b;
B='B';
if(b.c>maxn)
{
	maxn=b.c;
	B='C';
	}	
	if(b.j>maxn)
	B='J';

cout<<A<<" "<<B;	
	
	return 0;
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值