题目
Redraiment小时候走路喜欢蹦蹦跳跳,他最喜欢在楼梯上跳来跳去。
但年幼的他一次只能走上一阶或者一下子蹦上两阶。
现在一共有N阶台阶,请你计算一下Redraiment从第0阶到第N阶共有几种走法。
要求
输入包括多组数据。
每组数据包括一行:N(1≤N≤40)。
输入以0结束。
对应每个输入包括一个输出。
为redraiment到达第n阶不同走法的数量。
代码
#include<iostream>
using namespace std;
//本质是斐波那契数列 f(n) = f(n-1) + f(n-2)
int main() {
int n; //阶数
int sum[41]={
0}; //达到n阶不同的走法数量
int t1,t2;
int i=0; //记录达到n阶不同的走法数量的坐标
//当n等于0时跳出循环
while(cin>>n&&n) {
//每次循环初始化
t1=1;
t2=2;
if(n==1)
sum[i++]=1;
else if(n==2)
sum[i++]=2;
else {
for(int j=3;j<=n;j++) {
sum[i] = t1+t2;
t1 = t2;
t2 = sum[i];
}
i++;
}
}
//循环输出达到n阶不同的走法数量
for(int j=0;j<i;j++)
cout<<sum[j]<<endl;
return 0;
}
运行结果
总结
这题主要考察对斐波那契数列的认识,即使不认识也可以通过简单的运算得出f(n)=f(n-1)+f(n-2)这样的结论,比较麻烦的是对结果的输出