斐波那契(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)
输入格式:
第一行是测试数据的组数m,后面跟着m行输入。每行包括一个项数n和一个正整数a,(m,n,a均大于0,且均小于10000000)。
输出格式:
输出包含m行,每行对应一个输入,若a不大于Fib(n),则输出Yes,否则输出No(中间没有空行)。
输入样例:
3
1 3
10 50
24 20000
输出样例:
No
Yes
Yes
代码 (注意数组越界;斐波那契数列用数组、变量代换、递归均可)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[]) {
int m,n,a;
int i,j;
int f[36];
f[0]=0;
f[1]=1;
for(j=2;j<36;j++) f[j]=f[j-1]+f[j-2];
scanf("%d",&m);
for(i=1;i<=m;i++){
scanf("%d %d",&n,&a);
if(n>36) printf("Yes\n");
else{
if(a<=f[n]) printf("Yes\n");
else printf("No\n");
}
}
return 0;
}