题目描述
楼梯有 N 阶,上楼可以一步上一阶,也可以一步上二阶。
编一个程序,计算共有多少种不同的走法。
输入格式
一个数字,楼梯数。
输出格式
输出走的方式总数。
输入输出样例
输入
4
输出
5
说明/提示
- 对于 60% 的数据,N≤50
- 对于 100%的数据,1≤N≤5000。
#include<bits/stdc++.h>
using namespace std;
int n,len = 1,arr[5010][5010];//arr[k][i]第k阶台阶所对应的走法,len表示位数
void highadd(int k)//第k阶台阶,高精度加法
{
for(int i = 1; i <= len; i ++)
arr[k][i] = arr[k-1][i] + arr[k-2][i];//第k阶的方法等于一次走一步+一次性走两步的
for(int i = 1; i <= len; i ++)
{
if(arr[k][i] >= 10)
{
arr[k][i + 1] += arr[k][i] / 10;//进位
arr[k][i] =arr[k][i] % 10;
if(arr[k][len + 1] != 0) len++;
}
}
}
int main()
{
cin >> n;
arr[1][1] = 1, arr[2][1] = 2;//初始化
for(int i = 3; i <= n; i ++) //避免越界
highadd(i);
for(int i = len; i >= 1; i --) cout << arr[n][i];
return 0;
}