安噢 2023-01-20 11:22 采纳率: 75%
浏览 18
已结题

pat乙级1018wa

pat乙1018题,在pat中不能得到正确答案,在本地测试可以
源代码:
#include <cstdio>

int main(void){
    int t = 0;
    scanf("%d",&t);
    char a,b;
    int win_a,win_b = 0;
    int count_a[3] = {0};
    int count_b[3] = {0};
    for(int i = 0;i < t;i++){
        getchar();
        scanf("%c %c",&a,&b);
        if(a == 'C'){               //甲出锤子的情况
            if(b == 'J'){
                win_a++;
                count_a[0]++;
            }
            else if(b == 'B'){
                win_b++;
                count_b[2]++;
            }
        }
        else if(a == 'J'){        //甲出锤子的情况
            if(b == 'C'){
                win_b++;
                count_b[0]++;
            }
            else if(b == 'B'){
                win_a++;
                count_a[1]++;
            }
        }
        else if(a == 'B'){        //甲出布的情况
            if(b == 'C'){
                win_a++;
                count_a[2]++;
            }
            else if(b == 'J'){
                win_b++;
                count_b[1]++;
            }
        }
    }
    char big_a,big_b;int ja,jb = 0;
    for(int i,a_ = 0;i < 3;i++){
        if(count_a[i] > a_){
            a_ = count_a[i];
            ja = i;
        }
    }
    switch(ja){
        case 0:
            big_a = 'C';
        case 1:
            big_a = 'J';
        case 2:
            big_a = 'B';
    }
    for(int i,b_ = 0;i < 3;i++){
        if(count_b[i] > b_){
            b_ = count_b[i];
            jb = i;
        }
    }
    switch(jb){
        case 0:
            big_b = 'C';
        case 1:
            big_b = 'J';
        case 2:
            big_b = 'B';
    }
    printf("%d %d %d\n",win_a,t - win_a -win_b,win_b);
    printf("%d %d %d\n",win_b,t - win_a -win_b,win_a);
    printf("%c %c\n",big_a,big_b);
    return 0;
}

正确输出:
5 3 2
2 3 5
B B


pat运行结果:
-591599579 591599587 2
2 591599587 -591599579
B B

刚学代码,自己不知道哪里出错了,麻烦大伙给看看
  • 写回答

2条回答 默认 最新

  • qzjhjxj 2023-01-20 14:47
    关注

    第11行的getchar() 删除。
    第12行scanf("%c %c",&a,&b); 修改为:scanf(" %c %c", &a, &b);
    第45行 for(int i,a_ = 0;i < 3;i++) 修改为:for (int i = 0, a_ = 0; i < 3; i++)
    第59行 for(int i,b_ = 0;i < 3;i++) 修改为:for (int i = 0, b_ = 0; i < 3; i++)
    以上错误修改如下,逻辑判断统计上还有问题,最后的数值结果不对,供参考:

    #include <cstdio>
    int main(void) {
        int t = 0;
        scanf("%d", &t);
        char a, b;
        int win_a, win_b = 0;
        int count_a[3] = { 0 };
        int count_b[3] = { 0 };
        for (int i = 0; i < t; i++) {
            //getchar();             //修改
            scanf(" %c %c", &a, &b);  //scanf("%c %c", &a, &b);修改
            if (a == 'C') {               //甲出锤子的情况
                if (b == 'J') {
                    win_a++;
                    count_a[0]++;
                }
                else if (b == 'B') {
                    win_b++;
                    count_b[2]++;
                }
            }
            else if (a == 'J') {        //甲出锤子的情况
                if (b == 'C') {
                    win_b++;
                    count_b[0]++;
                }
                else if (b == 'B') {
                    win_a++;
                    count_a[1]++;
                }
            }
            else if (a == 'B') {        //甲出布的情况
                if (b == 'C') {
                    win_a++;
                    count_a[2]++;
                }
                else if (b == 'J') {
                    win_b++;
                    count_b[1]++;
                }
            }
        }
        char big_a, big_b; int ja, jb = 0;
        for (int i = 0, a_ = 0; i < 3; i++) {   //for (int i, a_ = 0; i < 3; i++) 修改
            if (count_a[i] > a_) {
                a_ = count_a[i];
                ja = i;
            }
        }
        switch (ja) {
        case 0:
            big_a = 'C'; break; //修改
        case 1:
            big_a = 'J'; break; //修改
        case 2:
            big_a = 'B'; break; //修改
        }
        for (int i = 0, b_ = 0; i < 3; i++) {   //for (int i, b_ = 0; i < 3; i++)
            if (count_b[i] > b_) {
                b_ = count_b[i];
                jb = i;
            }
        }
        switch (jb) {
        case 0:
            big_b = 'C'; break; //修改
        case 1:
            big_b = 'J'; break; //修改
        case 2:
            big_b = 'B'; break; //修改
        }
        printf("%d %d %d\n", win_a, t - win_a - win_b, win_b);
        printf("%d %d %d\n", win_b, t - win_a - win_b, win_a);
        printf("%c %c\n", big_a, big_b);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月29日
  • 已采纳回答 1月21日
  • 创建了问题 1月20日

悬赏问题

  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒