超级楼梯
2014-09-21 20:43
155 查看
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。
对于每个测试实例,请输出不同走法的数量。
本问题不算难,主要是第一次自己写分治和递归,加强一下印象。只考虑最后只剩下一个、两个和三个台阶的情况,这三种情况是很好处理的,其余的情况都可以有这三种基本情况推出。
其实这本质上就是一个斐波那契数列。
注意一点就是递归结束的条件,分别是第一台阶,两个台阶,和三个台阶的方案数。
输入数据首先包含一个整数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)); } } }
注意一点就是递归结束的条件,分别是第一台阶,两个台阶,和三个台阶的方案数。
相关文章推荐