PAT1018 锤子剪刀布

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

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

题目分析

1.要统计甲、乙胜、负、平的次数,以及哪种手势赢的次数最多。

2.如果一方全胜或只有平局,则输出按字母序最小的解。

代码设计

#include<stdio.h>
int compare(char a,char b)  
{
    if(a=='B' && b=='C') return 0;
    else if(a=='C' && b=='J') return 1;
    else if(a=='J' && b=='B') return 2;
    else if(a==b) return 3;
    if(b=='B' && a=='C') return 4;
    else if(b=='C' && a=='J') return 5;
    else if(b=='J' && a=='B') return 6;
}

int arrmax(int *arr, int n)
{
	int i,max=0;
	for(i=0;i<n;i++)
	{
		if(arr[max]<arr[i]) max=i;
	    else if(arr[max]==arr[i]) 
     	{
		     if(max>i) max=i;
    	}
    }
    return max;
} 

int main()
{
	int n; scanf("%d",&n);
	char a,b;
	int i,check;  
	int aw=0,bw=0,ping=0;//统计胜负 
	int awg[3]={0,0,0},bwg[3]={0,0,0},ag,bg; //统计胜利手势的次数 
	for(i=1;i<=n;i++)
	{
		scanf(" %c %c",&a,&b);
        //这里值得注意,因为每次数据前都有一个回车,因此在第一个%c前加上空格,来消除空格影响
		check=compare(a,b);
		if(check==0||check==1||check==2) 
		{
			aw++;
		    if(check==0)  awg[0]++;
		    else if(check==1) awg[1]++;
		    else awg[2]++;
		}
		if(check==3) ping++;
		if(check==4||check==5||check==6) 
		{ 
		    bw++;
		    if(check==4)  bwg[0]++;
		    else if(check==5) bwg[1]++;
		    else bwg[2]++;
		}
	}
	switch(arrmax(awg,3))
	{
		case 0: ag='B';break; 
		case 1: ag='C';break; 
		case 2: ag='J';break; 
	}
	switch(arrmax(bwg,3))
	{
		case 0: bg='B';break; 
		case 1: bg='C';break; 
		case 2: bg='J';break; 
	}
	printf("%d %d %d\n",aw,ping,bw);
	printf("%d %d %d\n",bw,ping,aw);
	printf("%c %c",ag,bg);
    return 0;
}

唯一要注意的地方就是,读入数据时对回车和空格影响的消除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值