利用地图将BCJ映射成123,同时将123映射成BCJ。解除int数组的下标不能为字母的限制。当然也可以用结构体来操作,会简单很多。
#include <cstdio>
#include <map>
using namespace std;
const int maxn=3210;
map<char,short > mapStudent;//将BCJ变成123,然后用a,b数组分别存储两个选手赢时的出手类型。 //如a[1]=2表明1号选手出布的时候赢了两次。
map<short,char > Studentmap;
int a[maxn],b[maxn];
int win1,win2,pin;
void pd(char x,char y){
if(x==y) {pin++;return;}
if(x=='C'&&y=='J') {win1++;a[mapStudent[x]]++; return;}
if(x=='J'&&y=='B') {win1++;a[mapStudent[x]]++; return;}
if(x=='B'&&y=='C') {win1++;a[mapStudent[x]]++; return;}
//其余情况均为2号选手赢
win2++;b[mapStudent[y]]++;
return;
}
int main(){
mapStudent['B']=1;mapStudent['C']=2;mapStudent['J']=3;//
Studentmap[1]='B';Studentmap[2]='C';Studentmap[3]='J';
int t=0; if( scanf("%d",&t) );
for(int i=0;i<t;i++){
char boyi1,boyi2;
getchar();//滤掉回车
if( scanf("%c %c",&boyi1,&boyi2) );
pd(boyi1,boyi2);
}
printf("%d %d %d",win1,pin,t-win1-pin);
printf("\n%d %d %d",win2,pin,t-win2-pin);
short q=1,p=1;
for(int i=1;i<=3;i++){if(a[i]>a[q]) q=i; if(b[i]>b[p]) p=i;} //找次数最多的出手类型
printf("\n%c",Studentmap[q]);printf(" %c",Studentmap[p]);
}