题目描述
楼梯有 N 阶,上楼可以一步上一阶,也可以一步上二阶。
编一个程序,计算共有多少种不同的走法。
输入格式
一个数字,楼梯数。
输出格式
输出走的方式总数。
输入输出样例
输入 #1
4
输出 #1
5
说明/提示
- 对于 60% 的数据,N≤50;
- 对于100% 的数据,1≤N≤5000。
/*
* @Description: To iterate is human, to recurse divine.
* @Autor: Recursion
* @Date: 2022-03-09 09:45:07
* @LastEditTime: 2022-03-09 10:44:06
*/
#include <bits/stdc++.h>
using namespace std;
// int f(int n){
// if(n==0)
// return 0;
// if(n==2)
// return 2;
// if(n==1)
// return 1;
// int a[50005];
// a[1]=1;
// a[2]=2;
// for(int i=3;i<=n;i++){
// a[i]=a[i-1]+a[i-2];
// }
// return a[n];
// }
int n,f[5010][5010],len=1;
void jia(int k)//k存阶数
{
for(int i=1;i<=len;i++)
f[k][i]=f[k-1][i]+f[k-2][i];
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]>0)
len++;
}
}
int main()
{
int n;
cin>>n;
f[1][1]=1;
f[2][1]=2;
for(int i=3;i<=n;i++)
jia(i);
for(int i=len;i>=1;i--)
cout<<f[n][i];
}
len要设为1,不然没输出
978





