我写了Jolly Jump problem的解决代码(ACM 10038 紫外线)。我的代码如下:
#include<stdio.h>
#include<stdlib.h>
int main(){
int count=0;
int Number[3000]={0};
int Absolute[3000]={0};
bool flag=true;
while(scanf("%d",&count)){
for(int i=0;i<count;++i){
scanf("%d",&Number[i]);
Absolute[i]=0;
}
for(int j=0;j<count-1;++j){
int diff=Number[j]-Number[j+1];
if(diff<0)diff*=-1;
Absolute[diff]=1;
}
flag=true;
for(int x=1;x<count;++x){
if(Absolute[x]!=1){
flag=false;
break;
}
}
if(flag)printf("Jolly\n");
else printf("Not Jolly\n");
}
return 0;
}
但是提交的结果是Time limit exceeded。为什么?如何修改我的代码以缩短运行时间?
您的程序可能超出了时间限制,因为它永远不会完成。如果/当 scanf()
返回 EOF
时,以下将永远不会停止循环:
while(scanf("%d",&count)){
// whatever...
}
在这些在线编程问题中,通常最好至少针对他们在问题中提供的示例数据运行您提出的解决方案,看看您是否获得预期的输出。如果你的程序没有产生预期的输出,那么你就知道你有问题需要解决(并且你有一些具体的东西需要调试)。
我是一名优秀的程序员,十分优秀!