洛谷 P1255 数楼梯

127 篇文章 0 订阅
20 篇文章 0 订阅

题目描述

楼梯有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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值