一段代码为什么runtime error

Description
斐波那契(Fibonacci,意大利数学家,1170年-1240年)数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……。这个数列从第三项开始,每一项都等于前两项之和。在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。
已知斐波那契数列第n项的计算公式如下。在计算时有两种算法:递归和非递归,请给出其中一种算法。
当n=0时,Fib(n)=0,当n=1时,Fib(n)=1,当n>1时,Fib(n)= Fib(n-1)+ Fib(n-2)
Input
第一行是测试数据的组数m,后面跟着m行输入。每行包括一个项数n和一个正整数a。(m,n,a均大于0,且均小于10000000)
Output
输出包含m行,每行对应一个输入,若a不大于Fib(n),则输出Yes,否则输出No(中间没有空行)
Sample Input
3
1 3
10 50
24 20000
Sample Output
No
Yes
Yes

代码

include<stdio.h>

int count(int n)
{int sum=0,a[100],i;
if(n==1) sum=1;
else if(n==0) sum=0;
else{a[0]=0;a[1]=1;
for(i=0;i<n-2;i++)
{a[i+2]=a[i]+a[i+1];}
for(i=0;i<n;i++)
sum+=a[i];
}
return sum;}
int main()
{int n,a,m,x;
while(scanf("%d",&n)!=EOF)
{while(n--)
{scanf("%d %d",&m,&a);
x=count(m);
if(a>x) printf("Non");
else printf("Yesn");}}
return 0;}

阅读 2.8k
1 个回答

为什么就那么确定计算到 100 项就不计算了?题目给的范围可是 10000000,所以你是数组越界了……

PS:代码写得真烂

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进