现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
输出第 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;
}
唯一要注意的地方就是,读入数据时对回车和空格影响的消除