1. 程式人生 > >B1018:錘子剪刀布(20')

B1018:錘子剪刀布(20')

思路:每次輸入進行比較。甲負的次數就是乙贏的次數,不用額外記錄。最後輸出甲乙獲勝最多的手勢,因為要考慮解不唯一,所以我採用把結果列舉。按字典序,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;
}