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; }