B1018:錘子剪刀布(20')
阿新 • • 發佈:2019-01-26
思路:每次輸入進行比較。甲負的次數就是乙贏的次數,不用額外記錄。最後輸出甲乙獲勝最多的手勢,因為要考慮解不唯一,所以我採用把結果列舉。按字典序,J次數必須大於B和C,C次數必須大於B,可以大於等於B,B大於等於B、J就行。
注意:scanf會把'\n'讀入,所以可能輸入五組資料,就跳出結果了,要用getchar()來吸收。另外,判斷要用if-else,不能用多個if,而沒有else,這樣會記錄次數出現錯誤。
程式碼:
#include<cstdio> int main(){ int n,count1,count2,count3,c1,j1,b1,c2,j2,b2,i; count1=count2=count3=c1=j1=b1=c2=j2=b2=0; scanf("%d",&n); char a[n][2]; for(i=0;i<n;i++){ getchar(); //scanf會把\n換行符讀入,所以用getchar吸收\n scanf("%c %c",&a[i][0],&a[i][1]); if(a[i][0]=='C'&&a[i][1]=='J'){ count1++; //甲贏一次 c1++; //甲錘子贏一次 } else if(a[i][0]=='C'&&a[i][1]=='B'){ count2++; b2++; } else if(a[i][0]=='J'&&a[i][1]=='C'){ count2++; c2++; } else if(a[i][0]=='J'&&a[i][1]=='B'){ count1++; j1++; } else if(a[i][0]=='B'&&a[i][1]=='C'){ count1++; b1++; } else if(a[i][0]=='B'&&a[i][1]=='J'){ count2++; j2++; } else count3++; } printf("%d %d %d\n",count1,count3,count2); //甲負即乙贏 printf("%d %d %d\n",count2,count3,count1); if(j1>c1&&j1>b1) printf("J "); if(b1>=c1&&b1>=j1) printf("B "); if(c1>b1&&c1>=j1) printf("C "); if(j2>c2&&j2>b2) printf("J"); if(b2>=c2&&b2>=j2) printf("B"); if(c2>b2&&c2>=j2) printf("C"); return 0; }
二刷程式碼:
#include<stdio.h> int main(){ int N; char jia,yi; int AS,AE,AF,count1c,count1j,count1b,count2c,count2j,count2b; //甲勝、甲平、甲負 AS = AE = AF = count1c = count1j = count1b = count2c = count2j = count2b = 0; scanf("%d",&N); for(int i = 0;i < N;i ++){ getchar(); scanf("%c %c",&jia,&yi); if(jia == 'C' && yi == 'J'){ AS++; count1c++; //只要記錄贏的時候的手勢,看清題目 } else if(jia == 'C' && yi == 'B'){ AF++; count2b++; } else if(jia == 'C' && yi == 'C'){ AE++; } else if(jia == 'B' && yi == 'B'){ AE++; } else if(jia == 'B' && yi == 'C'){ AS++; count1b++; } else if(jia == 'B' && yi == 'J'){ AF++; count2j++; } else if(jia == 'J' && yi == 'B'){ AS++; count1j++; } else if(jia == 'J' && yi == 'C'){ AF++; count2c++; } else{ AE++; } } printf("%d %d %d\n",AS,AE,AF); printf("%d %d %d\n",AF,AE,AS); if(count1b >= count1c && count1b >= count1j){ printf("B "); } else if(count1c > count1b && count1c >= count1j){ //結果相同,按字典序輸出 printf("C "); } else if(count1j > count1b && count1j > count1c){ printf("J "); } if(count2c > count2b && count2c >= count2j){ printf("C"); } else if(count2b >= count2c && count2b >= count2j){ printf("B"); } else if(count2j > count2b && count2j > count2c){ printf("J"); } return 0; }