我怀疑..在ideone和我的gcc编译器上运行正常但是..codechef正在给运行时错误..p 请帮忙
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
//printf("thisis it");
int i,n,t;
long int a[200000],f[100008];
f[0]=0;f[1]=1;
for(i=1;i<200000;i++)
a[i]=0;
i=1;
while(f[i]<=100000)
{
i++;
f[i]=f[i-1]+f[i-2];
a[f[i]]=1;
}
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
if(a[n]==1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
请帮助...为什么它在codechef上给出运行时错误...一切都很好......
答案 0 :(得分:0)
我想这里有一个错误:
a[f[i]]=1;
即使是第40个斐波纳契数(102334155)也将大于 200000
,因此它将超出a
的范围。
更新:抱歉,我没有注意到循环运行直到f [i] <= 10000,而不是i <= 10000.
另一个可能的问题是
if(a[n]==1)
你不检查n是否小于一个大小,如果有人输入一个非常大的数字,代码就会产生段错误。
答案 1 :(得分:0)
首先,你为什么只从第二个值开始[]? a [0]应该是un-inited?
其次,你的问题似乎是[f [i]] = 1; 你的f [i]第28个值的值应该是317811,超过了一个大小。
此代码中的内容过于复杂,我建议修改它。