题目描述
楼梯有 NN 阶,上楼可以一步上一阶,也可以一步上二阶。
编一个程序,计算共有多少种不同的走法。
输入格式
一个数字,楼梯数。
输出格式
输出走的方式总数。
输入输出样例
输入 #1
4
输出 #1
5
说明/提示
- 对于 60\%60% 的数据,N \leq 50N≤50;
- 对于 100\%100% 的数据,1 \le N \leq 50001≤N≤5000。
/*斐波那契 1 1 2 3 5....... 从第三项开始,前两项的和为第三项,f(n)=f(n-1)+f(n-2)。*/
/*高精度 将每一位数字放在数组中输出*/
放ac代码 c语言
#include<stdio.h>
int f[5050][5050];
int len=1;
void deal(int x)
{
for(int i=1;i<=len;i++) //利用了斐波那契的思想 算出得到了几种方法
{
f[x][i]=f[x-1][i]+f[x-2][i]; //斐波那契
}
for(int i=1;i<=len;i++)//处理进位
{
if(f[x][i]>=10)//必须满足大于等于10
{
f[x][i+1]=f[x][i+1]+f[x][i]/10;//向高一位进1
f[x][i]=f[x][i]%10;
if(f[x][len+1])
len++;//处理最高到达的位数
}
}
}
int main()
{
int n;
scanf("%d",&n);
f[1][1]=1;
f[2][1]=2; //f[i][j]代表走到第i个楼梯有的方法数
for(int i=3;i<=n;i++)
{
deal(i);
}
for(int i=len;i>=1;i--) //倒叙输出值 ,因为在前面存放的时候 用的是求余运算 是倒着放进数组的
{
printf("%d",f[n][i]);
}
return 0;
}