一本通 1190:上台阶
【题目描述】
楼梯有n(71>n>0)阶台阶,上楼时可以一步上1阶,也可以一步上2阶,也可以一步上3阶,编程计算共有多少种不同的走法。
【输入】
输入的每一行包括一组测试数据,即为台阶数n。最后一行为0,表示测试结束。
【输出】
每一行输出对应一行输入的结果,即为走法的数目。
当我们面对一个问题时,我们可以通过找到问题的规律,来设计出一个递推式,从而解决问题。对于这道题目,我们可以通过以下思路来设计递推式:
假设我们已经知道了对于 n−1 步台阶、n−2 步台阶和 n−3 步台阶的走法数分别为 f、[n−1]f [n−2]和f,那么我们如何计算 [n−3]n 步台阶的走法数呢?
我们可以考虑在n −1步台阶的基础上,再走一步,这样就可以到达n步台阶。那么到达n 步台阶的走法数就是到达n −1步台阶的走法数f。[n−1] 同样的,我们也可以考虑在n −2步台阶的基础上,再走两步,这样也可以到达n 步台阶。那么到达n 步台阶的走法数就是到达n −2步台阶的走法数f。[n−2] 最后,我们也可以考虑在n −3步台阶的基础上,再走三步,这样同样可以到达n 步台阶。那么到达n 步台阶的走法数就是到达n −3步台阶的走法数f。[n−3] 由此可见,到达n 步台阶的走法数就是到达n −1步台阶、n −2步台阶和n −3步台阶的走法数之和,即: f [n]=f[n−1]+f[n−2]+f[n−3] 这就是递推式的推导过程。通过这个递推式,我们可以计算出任意步数的台阶的走法数。当我们面对一个问题时,我们可以通过找到问题的规律,来设计出一个递推式,从而解决问题。对于这道题目,我们可以通过以下思路来设计递推式:
假设我们已经知道了对于 n−1 步台阶、n−2 步台阶和 n−3 步台阶的走法数分别为 f、[n−1]f [n−2]和f,那么我们如何计算 [n−3]n 步台阶的走法数呢?
我们可以考虑在n −1步台阶的基础上,再走一步,这样就可以到达n步台阶。那么到达n 步台阶的走法数就是到达n −1步台阶的走法数f。[n−1] 同样的,我们也可以考虑在n −2步台阶的基础上,再走两步,这样也可以到达n 步台阶。那么到达n 步台阶的走法数就是到达n −2步台阶的走法数f。[n−2] 最后,我们也可以考虑在n −3步台阶的基础上,再走三步,这样同样可以到达n 步台阶。那么到达n 步台阶的走法数就是到达n −3步台阶的走法数f。[n−3] 由此可见,到达n 步台阶的走法数就是到达n −1步台阶、n −2步台阶和n −3步台阶的走法数之和,即: f [n]=f[n−1]+f[n−2]+f[n−3] 这就是递推式的推导过程。通过这个递推式,我们可以计算出任意步数的台阶的走法数。
AC 源码
#include<iostream>
using namespace std;
int main(){
long long f[100];
f[1] = 1;
f[2] = 2;
f[3] = 4;
for(int i=4;i<100;i++)
{
f[i] = f[i-1] + f[i-2] + f[i-3];
}
int n;
while(cin>>n && n !=0)
{
cout << f[n] << endl;
}
return 0;
}