codeup id 6172 锤子剪刀布

/*输入
输入第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//甲胜出最多手势 乙胜出最多手势
*/

#include<iostream>
#define Maxsize 100010
using namespace std;
int contract(char a,char b)
{
	if(a=='C'&&b=='J')
	return 1;
	if(a=='J'&&b=='B')
	return 2;
	if(a=='B'&&b=='C')
	return 3;
	if(b=='C'&&a=='J')
	return -1;
	if(b=='J'&&a=='B')
	return -2;
	if(b=='B'&&a=='C')
	return -3;
	if(a==b)
	return 0;
	
}

int max(int c,int j,int b)
{int max=c;
 max=c>j?c:j;
 max=c>b?c:b;
 max=j>c?j:c;
/* 
max=j>b?j:b;
 max=b>c?b:c;
 max=b>j?b:j;*/
 return max;
}
int main()
{
	int N,i,j,k;
	char n_a[Maxsize],n_b[Maxsize];
	while(scanf("%d ",&N)!=EOF)
	{
		if(N>100000||N<=0)
		break;
	 int same,a_c,a_j,a_b,b_c,b_j,b_b,sum_a,sum_b,a_lost,b_lost,pd1,pd2;
	 same=a_c=a_j=a_b=b_c=b_j=b_b=sum_a=sum_b=a_lost=b_lost=0;
	for(i=0;i<N;i++)
	  {
	   n_a[i]=getchar();
	   getchar();
	    n_b[i]=getchar();
	    getchar();

	  }
	    
		for(i=0;i<N;i++)
		{ 
		k=contract(n_a[i],n_b[i]);

		switch(k)
		{case 0:{same++;break;}
		 case 1:{a_c++;break;}//甲出捶win
		 case 2:{a_j++;break;}//甲出剪刀win
		 case 3:{a_b++;break;}//甲出布win
		 case -1:{b_c++;break;}//甲出捶win
		 case -2:{b_j++;break;}//甲出剪刀win
		 case -3:{b_b++;break;}//甲出布win
		 default :break;
		}

		}
	 	
	   sum_a=a_c+a_j+a_b;//总共A的win
	   sum_b=b_c+b_j+b_b;//总共B的win
		
		a_lost=N-sum_a-same;
		b_lost=N-sum_b-same;
		printf("%d %d %d\n",sum_a,same,a_lost);
	    printf("%d %d %d\n",sum_b,same,b_lost);
	    pd1=max(a_c,a_j,a_b);
	    pd2=max(b_c,b_j,b_b);
		if(a_b==pd1)
		printf("B");
		 else if(a_c==pd1)
		 printf("C");
		 else	if(a_j==pd1)
		  printf("J");
		  
		  printf(" ");
		  
		 if(b_b==pd2)
		printf("B");
		 else if(b_c==pd2)
		 printf("C");
		 else	if(b_j==pd2)
		  printf("J");
	  
	//	printf("\n");
		

	
	       
	    printf("\n");
	}
	return 0;
}

输入犯了错误,因为中间有空格隔开两组数据,用scanf(“%c%c”,&n_a[i],&n_b[i]);但会发现将前10装入A数组中,但却将空格装入B数组中。改为scanf(“%c空格%c”,&n_a[i],&n_b[i]);则会每次字符加空格,不可用。则需通过getchar()接收,而getchar()是以回车结束,空格也会结束,需要一个额外getchar()吸收空格。

 

最后输出优先输出搞了半天发现想岔了,不用大段判断,只需要和最值比较按照顺序即可。

 

 

 

 

 

 

 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值