数楼梯

本文介绍了一个经典的递归问题——计算不同楼梯走法的数量,并通过使用高精度加法和斐波那契数列来解决该问题。文章提供了一个C++实现示例,详细展示了如何用数组存储每一步的可能走法,并通过逐层递推最终得出所有可能的走法。

题目描述
楼梯有 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];
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这咋又bug了嘛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值