请大佬解惑吗

P1320 压缩技术(续集版)

aoe666 @ 2024-11-17 09:44:45

代码如下:

#include <stdio.h>

int
main (void)
{
    int output[201] = { 0 }; /* 存储需要输出的数据*/
    int i = 1;               /* 索引, 0记录矩形的边长,单独处理 */
    int c = 0;               /* 读入字符 */
    int count = 0; /* 统计读入字符的数量,遇到第一个换行符时,得到矩形的边长 */
    int n = 0;     /* 记录'0' 或 '1' 的个数*/

    int flag = '0'; /* 通过 */

    /* 未通过1
    int flag = getchar ();
    ungetc (flag, stdin);
    */

    /* 未通过2
    int flag = getchar ();
    ++count;
    ++n;
    */

    while ((c = getchar ()) != EOF) {
        if (c == '\n') { /* 记录矩形边长 */
            if (output[0] == 0) {
                output[0] = count;
            }
            continue;
        }

        if (c != flag) { /* 记录'0'或'1'的个数*/
            flag = c;
            output[i++] = n;
            n = 0;
        }

        ++count;
        ++n;
    }
    // 输出
    output[i] = n;
    for (int j = 0; j <= i; ++j) {
        printf ("%d%s", output[j], j == i ? "\n" : " ");
    }
    return 0;
}

问题是这里: 设立了一个标志位判断是'0'还是'1',刚开始简单的赋值为'0',通过了。 后来又想如果第一个输入不确定'0'还是'1'呢(题目说了是'0'),于是又改了下,flag设置成第一个读入的字符。结果就通不过了。半天没想明白,请大佬解惑

    int flag = '0'; /* 通过 */

    /* 未通过1
    int flag = getchar ();
    ungetc (flag, stdin);
    */

    /* 未通过2
    int flag = getchar ();
    ++count;
    ++n;
    */

by Tiskan_H @ 2024-11-21 15:16:34

@aoe666

个人理解,如果第一个是1,应该会先输出0

1 1 
0 0

应该是2 0 2 2


by aoe666 @ 2024-11-21 21:05:21

@Tiskan_H 哈哈,几天没来都快忘了这个了。 前两天我不能下载测试数据,今天看到你的消息,也能下载测试数据了.又试了一下,发现我本机和服务器的结果不一样。 我本机测试的结果是对的,平台的却错了。 第一次在平台上做题,不知道和本机有什么区别,感觉是输出流的问题。Debug了半天,搞不懂,不搞了


by aoe666 @ 2024-11-21 21:10:17

@Tiskan_H 你给的例子,我在本地测试,结果是2 2 2,也没问题


|