HDU -> ACM ->超级楼梯

Problem Description
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
 

Input
输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。
 

Output
对于每个测试实例,请输出不同走法的数量
 

Sample Input
2
2
3
 

Sample Output
1
2
 

Author
lcy
 
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[40];
    int i;
    a[0] = 1;   //二层
    a[1] = 2;   //三层
    for(i = 2; i < 40; i++)
    {
        a[i] = a[i - 1] + a[i - 2]; //第n阶楼梯走法为(n - 1)阶楼梯 走法+  (n - 2)阶楼梯走法
    }

    int n;
    scanf("%d", &n);
    while(n--)
    {
        int stair;
        scanf("%d", &stair);
        printf("%d\n", a[stair - 2]);
    }
    return 0;
}
简单的动态规划问题:注意到每增加一层楼梯,那么登上这层楼梯的方法有两种:1.从比他少一阶的楼梯往上走一步
2.从比他少两阶的楼梯往上走两步

入果要求第n阶楼梯的走法,那么我们只需知道(n-1)和(n -2)阶楼梯所有的走法即可,以此类推;
我们只需直到第二阶楼梯和第三阶楼梯的走法就能推出剩下楼梯走法啦~(类似于斐波那契数列)
阅读更多

扫码向博主提问

去开通我的Chat快问

desporado

非学,无以致疑;非问,无以广识
上一篇c++ -&gt; 函数调用中设定对象的生命周期
下一篇DHU -&amp;amp;amp;gt; ACM -&amp;amp;amp;gt; 一只小蜜蜂
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭