斐波那契

Problem A:2001 斐波那契數列

Time Limit:1000MS  Memory Limit:65536K
Total Submit:1153 Accepted:297

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 main()
{
	int i,j,m,a,n;
	int fib[10000]={0,1};
	while(scanf("%d",&m)!=EOF)
	{
	    for(i=0;i<m;i++)
	    {
	       scanf("%d %d",&n,&a);
              if (n==0)
            {
                if (a<=0)
                {
                    printf("Yes\n");
                }
                else{
                    printf("No\n");
                }
            }
            else if (n==1)
            {
                if (a<=1)
                {
                    printf("Yes\n");
                }
                else
                {
                    printf("No\n");
                }
            }
            else
            {
                for ( j = 2; j <= n; j++)
                {

                    fib[j]=fib[j-1]+fib[j-2];
                    if (a<=fib[n])
                    {
                        printf("Yes\n");
                        break;
                    }
                    if (fib[j]>=10000000){
                        fib[j]=fib[j-1];
                    }

            }
                if(a>fib[n])
                 {
                     printf("No\n");
                 }
            }
	    }
	}
	return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章