hdu2041

题目


这道题以前也看到过,但是没有写出来,我刚开始以为用循环遍历一边就可以了,结果我错了,没想到是用的斐波拉出来的,用的是递推的思想


站在楼梯的第n级想一下,前一步是从哪里来的,问题就清楚了。

由于每次只能上一级或两级,那么f(n)=f(n-2)+f(n-1)。这不就是一个菲波拉契数列吗?就是一个递推问题?

开始时候是站在第1级台阶上,所以数列的开始几项会有所不同。

f(1)=0,因为开始就站在第1级台阶上;

f(2)=1,只能从第1级台阶上1级;

f(3)=2,只能从第1级台阶上2级,或只能从第2级台阶上1级;

f(n)=f(n-2)+f(n-1),n>3。

要先打个表,不然会爆的


#include<stdio.h>
int f[55];
void solve()
{
    f[0]=1;
    f[1]=1;
    f[2]=1;
    for(int i=3;i<=51;i++)
        f[i]=f[i-1]+f[i-2];
}
int main()
{
   int n;
   int T;
   solve();
   scanf("%d",&T);
   while(T--){
        scanf("%d",&n);
        printf("%d
",f[n]);
   }
    return 0;
}