阵列分割错误在斐波那契数程序

Array Segmentation fault error in fibbonacci number program

本文关键字:程序 分割 错误 阵列      更新时间:2023-10-16

我有疑问…它在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("Yesn");
            else
                printf("Non");
               }
    return 0;
               }

请帮…为什么它在编码器上给出运行时错误…虽然一切正常....

我想这里有一个错误:

a[f[i]]=1;

甚至第40个斐波那契数(102334155)将大于200000,因此它将超出a的范围。

更新:对不起,我没有注意到循环运行直到f[I] <= 10000,而不是I <= 10000。

另一个可能的问题是

if(a[n]==1)

你不检查n是否小于a的大小,如果有人输入一个非常大的数字,代码可能会产生段错误

首先,为什么只从第二个值初始化a[] ?A[0]应该是不请自来的?

第二,似乎你的问题是与[f[i]]=1;你的寻址f[i]的第28个值应该是317811,这超过了一个大小。

这段代码有些地方太复杂了,我建议修改一下