斐波那契数字程序中的数组分段错误错误

时间:2014-03-22 15:24:26

标签: c++ arrays segmentation-fault fault

我怀疑..在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上给出运行时错误...一切都很好......

2 个答案:

答案 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,超过了一个大小。

此代码中的内容过于复杂,我建议修改它。