超级楼梯

来源:互联网 发布:长岛的雪 知乎 编辑:程序博客网 时间:2024/04/28 05:38

有一楼梯共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));        }    }}

注意一点就是递归结束的条件,分别是第一台阶,两个台阶,和三个台阶的方案数。

0 0
原创粉丝点击