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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
全部评论

相关推荐

11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
躺尸修仙中:因为很多92的也去卷中小厂,反正投递简历不要钱,面试不要钱,时间冲突就推,不冲突就面试积累经验
点赞 评论 收藏
分享
头像
11-27 14:28
长沙理工大学
刷算法真的是提升代码能力最快的方法吗?&nbsp;刷算法真的是提升代码能力最快的方法吗?
牛牛不会牛泪:看你想提升什么,代码能力太宽泛了,是想提升算法能力还是工程能力? 工程能力做项目找实习,算法也分数据结构算法题和深度学习之类算法
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务