【通过PAT复习C++与数据结构】PAT B1008.锤子剪刀布

题目描述

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

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

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

思路分析

1.刚开始看的时候感觉还很简单,但是一运行漏洞百出,主要要注意输入的时候用getchar()把多余的空格给吞了;
2.%s和%c的区别,%s是字符串,是以\0结尾的,%c就是单个字符。

代码

#include<cstdio>
int main()
{
	int number;//记录总数
	scanf("%d", &number);
	int win=0,fal=0,flat=0;\\用来储存甲的胜负平场数,可以知道甲的胜负平就是乙的负胜平
	int c=0,j=0,b=0;\\小写cjb储存的是甲获胜的时候出的锤子、剪刀、布的次数
	int C=0,J=0,B=0;\\大写CJB储存乙的
	char max1,max2;\\存放甲乙出什么最容易获胜
	while(number--)\\这个循环完成主要功能,判断胜负,以及需要我们输出的参数的统计
	{
		char first,second;
		getchar();
		scanf("%c",&first);
		getchar();
		scanf("%c",&second);
		//printf("first is %c,second is %c\n",first,second);\\代码中有一些注释语句是我在报错之后找出哪里有问题的调试,我觉得这种方法可以值得学习
		if((first=='C'&&second=='J')||(first=='J'&&second=='B')||(first=='B'&&second=='C'))
		{
			//printf("此时是%d\n",number+1); 
			++win;
			//printf("number=%d\n",number);
			if(first=='C')++c;
			else if(first=='B')++b;
			else ++j;
		}
		else if(first==second) ++flat;
		else
		{
			++fal;
			if(second=='C')++C;
			else if(second=='B')++B;
			else ++J; 
		}
	
	}
	//printf("c=%d j=%d b=%d;C=%d J=%d B=%d\n",c,j,b,C,J,B);
	if(c>b&&c>j)max1='C';\\这段if用于统计甲获胜的时候出什么最多
	else if(b>c&&b>j)max1='B';
	else if(j>b&&j>c)max1='J';
	else if((c==j&&c==b)||(c==b&&b>j)||(j==b&&b>c)) max1='B';
	else if(c==j&&c>b) max1='C';
		
	if(C>B&&C>J)max2='C';
	else if(B>C&&B>J)max2='B';
	else if(J>C&&J>B)max2='J';
	else if((C==J&&C==B)||(C==B&&B>J)||(J==B&&B>C)) max2='B';
	else if(C==J&&C>B) max2='C';
	
	printf("%d %d %d\n%d %d %d\n%c %C\n",win,flat,fal,fal,flat,win,max1,max2);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值