为啥 会超时 我看了题解 思路跟有些大佬的是一样的 但是就是会超时

P1319 压缩技术

我是大帅比ZED @ 2022-09-17 14:02:49

为啥 会超时 我看了题解 思路跟有些大佬的是一样的 但是就是会超时

/*
  7
  3 1 6 1 6 4 3 1 6 1 6 1 3 7
  (第一个数是 N ,其余各位表示交替表示0和1 的个数,
    压缩码保证 N×N= 交替的各位数之和)
  0001000
  0001000
  0001111
  0001000
  0001000
  0001000
  1111111
 */
#include <stdio.h>

int main (void) 
{
    int N;
    scanf("%d", &N);

    int a, num = 0;// i%2 == 0打零 else 打1
    int count = 0;//作为每排的计数 当count == N时提行
    while (getchar() != '\n') 
    {
        scanf("%d", &a);

        if (num % 2 == 0)
            for (int j = 1; j <= a; j++)
            {
                printf("0");

                count++;
                if (count == N) 
                {
                    printf("\n");
                    count = 0;
                }
            } 
        else
            for (int j = 1; j <= a; j++) 
            {
                printf("1");
                count++;

                if (count == N) 
                {
                    printf("\n");
                    count = 0;
                }
            }

        num++;
    }

    return 0;
}

by Phobia @ 2022-09-17 14:07:38

可以考虑将

while (getchar() != '\n)

{

scanf("%d", &a);

写成

while (scanf("%d", &a) != EOF)

{


by 我是大帅比ZED @ 2022-09-17 14:07:47

但 若是 将while那排 写成

while ( (scanf("%d", &a)) != EOF ) 

就没事儿了 就很快速 这是为啥啊


by 我是大帅比ZED @ 2022-09-17 14:08:08

@31144bmsh 请问下 这是为什么呀


by liangbowen @ 2022-09-17 14:08:51

@我是大帅比ZED 因为 EOF 和换行符,不是同一个东西。具体比较玄学,反正最好不要用就行


by 我是大帅比ZED @ 2022-09-17 14:10:34

@liangbowen 您的意思是:

我最好用 EOF是吧

谢谢(^_^) orz


by Phobia @ 2022-09-17 14:11:32

@我是大帅比ZED

一是文件结尾可能没有'\n', 但一定有EOF。

二是如果一个数字后面没有数字但有多余的字符(比如空格),getchar()不会返回'\n',会继续读入数字,致使程序(可能)发生错误。


by liangbowen @ 2022-09-17 14:11:33

对,因为 window 和 linux 的换行好像是不一样的


by 吴承骏2段 @ 2022-09-17 14:37:48


by 我是大帅比ZED @ 2022-09-21 22:14:41

@31144bmsh 好的感谢!!!76g8


|