PTA(Basic Level) 1018:锤子剪刀布(C语言实现)
分析:想了很久,看了很多其他杰作,这个题没有什么捷径,只能尽量优化代码了。
#include <stdio.h>
int win(char a, char b)
{
if((a=='C'&&b=='J') || (a=='J'&&b=='B') || (a=='B'&&b=='C'))
return 1;
return 0;
}
void count(int a[],char b)
{
if(b == 'C')
a[0]++;
else if(b == 'J')
a[1]++;
else
a[2]++;
}
int cmp(int a[],char c[])
{
int i,max=0;
for(i=1; i<3; i++)
{
if(a[i] > a[max])
max=i;
if(a[i] == a[max])//按字典排序
if(c[i] < c[max])
max=i;
}
return max;
}
int main()
{
int n,wina=0,winb=0,i;
char a,b;
char C[]={'C','J','B'};
int A[3]={0},B[3]={0};
scanf("%d",&n);
for(i=0; i<n; i++)
{
getchar();
scanf("%c %c",&a,&b);
if(a==b)
continue;
if(win(a,b))//甲赢
{
count(A,a);
wina++;
}
else if(!win(a,b))//乙赢
{
count(B,b);
winb++;
}
}
printf("%d %d %d\n",wina,(n-wina-winb),winb);
printf("%d %d %d\n",winb,(n-wina-winb),wina);
printf("%c %c",C[cmp(A,C)],C[cmp(B,C)]);
return 0;
}