0分求助,为什么全是WA

P1320 压缩技术(续集版)

liferookie @ 2023-09-14 22:00:23

如题,真的是搞不明白,明明答案感觉没问题

#include <stdio.h>

int main(){
    int n;
    int oneNumber=0;
    int zeroNumber=0;

    char c[200];
    for(int i=0;i<200;i++){
        scanf("%c",&c[i]);
        if(c[i]=='\n'||c[i]=='\0'){
            n=i;
            break;
        }
    } //读取第一行
    char a[n-1][n];
    for(int x=0;x<n-1;x++){ //上面已经读取一行了,则n-1
        for(int y=0;y<=n;y++){ //需要y=n读取后面的'\n'防止变量混乱
            scanf("%c",&a[x][y]);
        }
    } //剩下的行

    printf("%d",n); //输出行数

    for(int i=0;i<n;i++){
        if(c[i]=='0'){
            zeroNumber++;
            if(oneNumber!=0){//证明是一后首个零
                printf(" %d",oneNumber);
                oneNumber=0; //清空'1'的个数
            } //第一个零则输出上个一的个数
        } else { //非'0'则'1'
            if(zeroNumber==0 && oneNumber==0){
                printf(" 0");
            } //第一个一没有上个零证明是第一个数,需要输出0
            oneNumber++;
            if(zeroNumber!=0){//证明是零后首个一
                printf(" %d",zeroNumber);
                zeroNumber=0; //清空'0'的个数
            }
        }
    } //仅为第一行,需要更换变量重复代码
    for(int x=0;x<n-1;x++){
        for(int y=0;y<n;y++){
            if(a[x][y]=='0'){
                zeroNumber++;
                if(oneNumber!=0){
                    printf(" %d",oneNumber);
                    oneNumber=0;
                }
            } else {
                oneNumber++;
                if(zeroNumber!=0){
                    printf(" %d",zeroNumber);
                    zeroNumber=0;
                }
            } //重复的代码
            if(x==n-2 && y==n-1){ //最后一位数直接打印
                if(zeroNumber==0){
                    printf(" %d",oneNumber);
                } else {
                    printf(" %d",zeroNumber);
                }
            }
        }
    }
    return 0;
}

by liferookie @ 2023-09-14 22:04:29

@microchip help me


by liferookie @ 2023-09-14 22:32:34

将11行 的if(c[i]=='\n'||c[i]=='\0') 更改为{if(c[i]!='0'&&c[i]!='1') 可过一个AC


by microchip @ 2023-09-15 17:54:11

@liferookie 以你发帖的代码进行更正

  1. 第23行应该输出n-1

  2. 第51行的 else 应改为 else if(a[x][y]=='1')

至于为什么嘛,我也不太清楚评测机对字符的判定方式,但根据你错的数据点反馈,似乎评测机对'\n'的理解和我们理解的不太一样(

所以字符串处理问题我个人习惯用string,不容易出锅,建议你习惯用string,我还没见过有哪些题必须用字符数组不能用字符串


by microchip @ 2023-09-15 17:57:52

还有我们认识吗QwQ


by liferookie @ 2023-09-27 17:57:11

@microchip c的字符串不会用(捂脸 kotlin的字符串好用多了。

我是在其他的讨论里看到您回答了别人的问题,于是询问您,期望着您能解决我的问题


by liferookie @ 2023-09-29 17:14:32

@microchip 我这改来改去还是有问题,换kotlin用字符串一遍过https://www.luogu.com.cn/record/126580726


|