C语言代码哪里错了?

P1320 压缩技术(续集版)

52wyd @ 2022-11-03 13:31:08

只能得20分,好心人帮我看看代码怎么改

#include <stdio.h>
#include <string.h>
char str[41000], s[210];
int main(void)
{
    int n, flag = 0, i, j;
    scanf("%s", str);
    n = strlen(str);

    for (i = 1; i <= n - 1; i ++)
    {
        scanf("%s", s);
        strcat(str, s);
    }

    printf("%d", n);

    for (i = 1; i <= n * n - 2; i ++)   
    {
        if (flag == 0 && str[i] != str[0])
        {
            printf(" %d", i);
            flag = 1;
        }
        for (j = i + 1; j <= n * n - 1 && flag == 1; j ++)
        {
            if (str[j] != str[i])
            {        
                printf(" %d", j - i);
                i = j - 1;                  
                if (j == n * n - 1)
                {
                    printf(" 1");
                    flag = 2;
                }
                break;
            }
            if (j == n * n - 1 && str[j] == str[i])
            {
                printf(" %d", j - i + 1);
                flag = 2;
                break;
            }

        }
        if (flag == 2)
            break;
    }

    if (flag == 0)
        printf(" %d\n", n * n);
    return 0;
}

by Terrible @ 2022-11-03 13:47:58

@zzulijk 如果输入第一个数是1的话,那么输出的第一个数是 0,因为

第一个数表示连续有几个 \texttt 0

你这个程序不能处理上述这种情况.

当然这个说法的指代可能有点含糊,因为很难讲清 0 个 0 是不是 “有”的概念,至少它没有被凸显出来让做题者很容易察觉到。


by 52wyd @ 2022-11-30 23:17:41

@Terrible 提交正确了谢谢你哦


|