题目描述
楼梯有 N 阶,上楼可以一步上一阶,也可以一步上二阶。
编一个程序,计算共有多少种不同的走法。
思路:经典递归题,算法是高精度+斐波那契数列,一切看注释
上代码:
#include<bits/stdc++.h>
using namespace std;
int f[5003][5003],n,len=1;
void lt(int k){
for(int i=1;i<=len;i++){
f[k][i]=f[k-1][i]+f[k-2][i]; //每次将前两次的楼梯步数加起来i为楼梯len所对应的楼梯步数,将两个数加起来并在下面判断进位
}
for(int i=1;i<=len;i++){
if(f[k][i]>=10){ //每次进位
f[k][i+1]+=f[k][i]/10;
f[k][i]%=10;
if(f[k][len+1])len++; //如果进位了len就加一位
}
}
}
int main(){
cin>>n;
f[1][1]=1;f[2][1]=2;
for(int i=3;i<=n;i++){ //类似01背包,将1到n所有的步数存储到数组中,每一行都是当前楼梯的走法
lt(i);
}
for(int i=len;i>0;i--){ //逆序将他们输出
cout<<f[n][i];
}
}
本文介绍了一个经典的递归问题——计算不同楼梯走法的数量,并通过使用高精度加法和斐波那契数列来解决该问题。文章提供了一个C++实现示例,详细展示了如何用数组存储每一步的可能走法,并通过逐层递推最终得出所有可能的走法。
672

被折叠的 条评论
为什么被折叠?



