总时间限制: 1000ms 内存限制: 65536kB
描述
楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可以一步上2阶,也可以一步上3阶,编程计算共有多少种不同的走法。
输入
输入的每一行包括一组测试数据,即为台阶数n。最后一行为0,表示测试结束。
输出
每一行输出对应一行输入的结果,即为走法的数目。
样例输入
1
2
3
4
0
样例输出
1
2
4
7
解析:类似于斐波那契数列的递归做法。关键在于找到其递归规则。
如果是1阶楼梯,共有1种走法。
如果是两阶楼梯,共有 1 1、2两种走法。
如果是3阶楼梯,共有111、12、21、3这4种走法。
如果是4阶楼梯,可以从1阶直接上到4阶或者从2阶上到4阶或者从3阶上到4阶,共有f(1)+f(2)+f(3)种走法。
若是5阶楼梯,可分别从2阶、3阶、4阶直接上到5阶,共f(2)+f(3)+f(4)中走法。
……
所以我们得到以下递归序列: f(n) = f(n-1) + f(n-2) + f(n-3);
附代码如下:
#include <iostream> #include <math.h> using namespace std; int main() { int n; int f[101]; int i=0; while(cin>>n) { if(n==0) break; f[1]=1; f[2]=2; f[3]=4; for(i=4;i<=n;i++) f[i]=f[i-1]+f[i-2]+f[i-3]; cout<<f[n]<<endl; } return 0; }