YT03-递推求解课后题目-1002 超级楼梯-(6.7日-烟台大学ACM预备队解题报告)

本文探讨了一个经典的楼梯攀登问题,即给定M级楼梯时,仅能每次跨上一级或两级的情况下,求达到第M级的不同走法数量。通过递推公式F(n) = F(n-1) + F(n-2)解决了该问题,并提供了有效的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

超级楼梯

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 97   Accepted Submission(s) : 38
Font: Times New Roman | Verdana | Georgia
Font Size:  

Problem Description

有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?

Input

输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。

Output

对于每个测试实例,请输出不同走法的数量

Sample Input

2
2
3

Sample Output

1
2

Author

lcy

Source

2005实验班短学期考试




144-2刘炎


解题思路:


每次有2种走法,并且要求最后还能正好到达M级。正着不行,逆向思维一下:要达到最后一级的前一级有两种可能,M-1或者M-2;

也就是说就是到达M-1的走法加上M-2的走法相加就等于到达最后一级的走法。

所以递推公式:

                      F(1)=1F(2)=1

                      F(n)=F(n-1)+F(n-2);


可以用递归或者递推两种方法实现

递归找的是递归函数,递推找的是递推公式;

递归函数每一次的调用都要保留现场,占用空间,多组测试容易超时,递推只需要公式打表即可;

long longjisuan(intn)

{

    if(n==1)return 1;

    if(n==2)return 2;

    else return jisuan(n-1)+jisuan(n-2);

}


#include <iostream>  
using namespace std;   
int main()  
{  
    int a[41],N,M;   
    cin>>N;    
    a[1]=1; a[2]=1;  
    for(int i=3;i<=40;i++)  
        a[i]=a[i-1]+a[i-2];  
    while(N--)
    {  
        cin>>M;  
        cout<<a[M]<<endl;  
    }  
    return 0;  
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值