一、可借鉴的
1. scanf(“%c”)会吸收空格和转义符
因此要在合适的地方加入getchar()吸收
2. 有一些真的是逻辑硬伤
添加getchar()后,由于之前用的是二维数组存储的字符,后来改为jia、yi后就输出正常了,但确定甲乙赢数最多的手势时用了错误的变量进行比较,要引以为戒。
3. 另一种解法
此题还可以将BCJ三个字符转换成数字012,这样可以少写很多if语句,也可以少建立很多数组,比较时候由于是循环大于的关系,可以使用%3的操作
二、代码
#include<cstdio>int main(){int num;int countjwin = 0,countywin = 0;int countping = 0;int count1[3] = {0},count2[3] = {0};int maxj[] = {0},maxy[] = {0};char jia,yi;char map[3] = {'B','C','J'};scanf("%d",&num);for (int i = 0;i < num;i++){getchar();scanf("%c %c",&jia,&yi);if((jia == 'B')&&(yi=='C')){count1[0]++;countjwin++;}else if(jia == 'C'&&yi=='J'){count1[1]++;countjwin++;}else if(jia == 'J'&&yi=='B'){count1[2]++;countjwin++;}else if(yi == 'B'&&jia=='C'){count2[0]++;countywin++;}else if(yi == 'C'&&jia=='J'){count2[1]++;countywin++;}else if(yi == 'J'&&jia=='B'){count2[2]++;countywin++;}else if(jia==yi){countping++;}}int id1 = 0,id2 = 0;for(int i = 0;i<3;i++){if(count1[i]>count1[id1]) id1 = i;if(count2[i]>count2[id2]) id2 = i;}printf("%d %d %d\n",countjwin,countping,countywin);printf("%d %d %d\n",countywin,countping,countjwin);printf("%c %c",map[id1],map[id2]);}
