您的位置:首页 > 其它

超级楼梯

2014-09-21 20:43 155 查看
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?

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

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

本问题不算难,主要是第一次自己写分治和递归,加强一下印象。只考虑最后只剩下一个、两个和三个台阶的情况,这三种情况是很好处理的,其余的情况都可以有这三种基本情况推出。

其实这本质上就是一个斐波那契数列。

#include<stdio.h>
int digui(int n)
{
    if (n == 1) return 0;
    else if (n == 2) return 1;
    else if (n == 3) return 2;
    else return digui(n-1)+digui(n-2);
}
int main()
{
    int n,m;
    while (~scanf("%d",&n))
    {
        while(n--)
        {
            scanf("%d",&m);
            printf("%d\n",digui(m));
        }
    }
}


注意一点就是递归结束的条件,分别是第一台阶,两个台阶,和三个台阶的方案数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: