题目描述
楼梯有 NN 阶,上楼可以一步上一阶,也可以一步上二阶。
编一个程序,计算共有多少种不同的走法。
输入格式
一个数字,楼梯数。
输出格式
输出走的方式总数。
输入输出样例
输入 #1
4
输出 #1
5
说明/提示
对于 60% 的数据,N≤50;
对于 100% 的数据,N≤5000
经过演算第4层的走法,发现本题为斐波那契数列的变形,由于数据过大所以采用高精度的方法。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int f[5002][5002];
int len =1;
void fib(int k){
for(int i = 1 ; i <= len; i++){
f[k][i] = f[k-1][i]+f[k-2][i];
}
//第i位只0-9,若>9,进1
for( int i = 1 ; i <= len ; i++)
if(f[k][i]>=10){
f[k][i+1]+=f[k][i]/10;
f[k][i]=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 ++)
fib(i);
//逆序输出
for( int i = len ; i >= 1 ;i–){
cout <<f[n][i];//输出第n层的走法
}
return 0;
}