题目描述
楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶。
编一个程序,计算共有多少种不同的走法。
输入输出格式
输入格式:
一个数字,楼梯数。
输出格式:
走的方式几种。
输入输出样例
输入样例#1:
4
输出样例#1:
5
说明
用递归会太慢,需用递推
(60% N<=50 ,100% N<=5000)
分析:
这题一看就是一个递推,仔细看数据,发现必须涉及高精度,没错!正解就是递推+高精度。
递推:
1、f[1]=1 f[2]=2 跳到第一,二台阶的值,也是递推初值
。
2.f[i]:=f[i-1]+f[i-2] 表示到第i级阶梯的方法总数。
高精度:
1.f[i]:=f[i-1]+f[i-2] 分别用三个数组循环进行,并且高精度!
注意!
1.数组位数要大!
2.考虑n=0,1,2的情况,特别是0!!!!
var
a,b,c:array [1..10000] of longint;
i,j,n,l,x:longint;
begin
readln(n);
if (n<=2)
then begin
write(n);
halt;
end;
a[1]:=1; b[1]:=2;
l:=1;
for i:=1 to n-2 do
begin
fillchar(c,sizeof(c),0);
inc(l);
x:=0;
for j:=1 to l do
begin
c[j]:=a[j]+b[j]+x;
x:=c[j] div 10;
c[j]:=c[j] mod 10;
end;
a:=b;
b:=c;
end;
while b[l]=0 do dec(l);
for i:=l downto 1 do write(b[i]);
end.