HDU_oj_2041 超级楼梯

Problem Description
 
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
 
Input
输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。
 
Output
对于每个测试实例,请输出不同走法的数量
 
Sample Input
2
2
3
 
Sample Output
1
2
 
分析:
第n级台阶只能从第n-1层或n-2层上来,所以计算第n级只需要将n-1级的走法加上n-2级的走法
即:F(n)=F(n-1)+F(n-2)
很像斐波那契数列,是典型的递归问题
注意点:
 
//递归解法,但不是递归写法
//递归写起来可能会超时
#include<iostream>
using namespace std;

int main()
{
    int n,m;
    int fx,fy,cnt;
    cin>>n;
    cnt=0;fx=1;fy=2;
    while(n--)
    {
        cin>>m;
        cnt=0;fx=1;fy=2;
        for(int i=4;i<=m;i++)
        {
            cnt=fx+fy;
            fx=fy;
            fy=cnt;
            
        }
        if(m==2)
        cout<<fx;
        else if(m==3)
        cout<<fy;
        else
        cout<<cnt;
        cout<<endl;
    }
    return 0;
}

 

 
 

 

posted @ 2017-12-10 12:09  T丶jl  阅读(172)  评论(0编辑  收藏  举报