C-到底哪错了 一直time limit exceed 请帮我看一下这个C程序(学校自家网站上的题)
#include<stdio.h>
void main()
{
int a[100000],n,i,f,m;
scanf("%d",&n);
while(n!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
f=1;
m=1;
for(i=0;i<n-1;i++)
{
if(a[i]<=a[i+1])
m++;
else
{
if(m>f)
f=m;
m=1;
}
}
printf("%d",m>f?m:f);
scanf("%d",&n);
}
}
要是换成while(scanf("%d",&n)!=EOF)便会提示wrong answer
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
while(scanf("%d",&n)!=EOF)
这段代码意思是直到终止输入才退出此循环,在linux下是按Ctrl-D。但是很明显系统检验你这个程序时不会这样做,相反地,是正常地输入一个值给n。所以这个循环是不可能跳出的,程序陷入了死循环。
scanf()函数一般来说返回成功赋值的数据项数,所以
while(scanf("%d",&n)!=EOF)
和
scanf("%d",&n);
while(n!=EOF)
是有本质区别的。
但是我觉得题主的程序这样写才靠谱
#include<stdio.h>
void main()
{
int a[100000],n,i,f=1,m=1;
scanf("%d",&n);
for(i=0; i<n; i++) scanf("%d",&a[i]);
for(i=1; i<n; i++){
if(a[i]<a[i-1]){
m = m > f ? m : f;
f = 1;
}else{
f++;
}
}
printf("%dn",m);
}