我是大帅比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