用了比较傻的方法

一、可借鉴的

1. scanf(“%c”)会吸收空格和转义符

因此要在合适的地方加入getchar()吸收

2. 有一些真的是逻辑硬伤

添加getchar()后,由于之前用的是二维数组存储的字符,后来改为jia、yi后就输出正常了,但确定甲乙赢数最多的手势时用了错误的变量进行比较,要引以为戒。

3. 另一种解法

此题还可以将BCJ三个字符转换成数字012,这样可以少写很多if语句,也可以少建立很多数组,比较时候由于是循环大于的关系,可以使用%3的操作

二、代码

  1. #include<cstdio>
  2. int main(){
  3. int num;
  4. int countjwin = 0,countywin = 0;
  5. int countping = 0;
  6. int count1[3] = {0},count2[3] = {0};
  7. int maxj[] = {0},maxy[] = {0};
  8. char jia,yi;
  9. char map[3] = {'B','C','J'};
  10. scanf("%d",&num);
  11. for (int i = 0;i < num;i++)
  12. {
  13. getchar();
  14. scanf("%c %c",&jia,&yi);
  15. if((jia == 'B')&&(yi=='C'))
  16. {
  17. count1[0]++;
  18. countjwin++;
  19. }
  20. else if(jia == 'C'&&yi=='J')
  21. {
  22. count1[1]++;
  23. countjwin++;
  24. }
  25. else if(jia == 'J'&&yi=='B')
  26. {
  27. count1[2]++;
  28. countjwin++;
  29. }
  30. else if(yi == 'B'&&jia=='C')
  31. {
  32. count2[0]++;
  33. countywin++;
  34. }
  35. else if(yi == 'C'&&jia=='J')
  36. {
  37. count2[1]++;
  38. countywin++;
  39. }
  40. else if(yi == 'J'&&jia=='B')
  41. {
  42. count2[2]++;
  43. countywin++;
  44. }
  45. else if(jia==yi)
  46. {
  47. countping++;
  48. }
  49. }
  50. int id1 = 0,id2 = 0;
  51. for(int i = 0;i<3;i++)
  52. {
  53. if(count1[i]>count1[id1]) id1 = i;
  54. if(count2[i]>count2[id2]) id2 = i;
  55. }
  56. printf("%d %d %d\n",countjwin,countping,countywin);
  57. printf("%d %d %d\n",countywin,countping,countjwin);
  58. printf("%c %c",map[id1],map[id2]);
  59. }