上台阶(每次1或2个台阶)

434 阅读2分钟

上台阶问题

问题描述 :

有 N 个台阶,从台阶底端走到台阶顶端。每次有2种走法选择,上一个台阶或者上两个台阶。

问一共有多少种走法?

原题描述如下:

image.png

问题分析:

拿到问题我也蒙,我们来慢慢分析:

1、1 个台阶 =》 1 种走法

2、2 个台阶 =》 2 种走法

3、3个台阶 =》 3 种走法

4、4个台阶 =》 5 种走法

5、5个台阶 =》 8 种走法

6、6个台阶 =》 13 种走法

7、7个台阶 =》 21 种走法

8、8个台阶 =》 34 种走法

看着,找规律

1 1 2 3 5 8 13 21 34 ... ...

这个数列规律,小学生都应该见过。 我儿子上一年级时候我就见过他填写过这个数列。

规律: 当前项的值 = 前两项的和 。 著名的 斐波那契数列 。玩股票的人也经常见到。

要是一下次没能想到分析的方式,可以考虑从概率的角度出发,最后就是求 A m n,问题了,对于中小学生来说,有些难度。建议采用分析的方式来解决问题。毕竟分析问题是很重要的。

编程实现

算法实现起来就很简单了:


int j10001(int n){
    if(n<2){
        return n;
    }
    int b=1;
    int c=1;
    int next=0;
    for(int i=2;i<=n;i++){
        next = b+c;
        b=c;
        c=next;
    }
    return c;
}

运行结果

main 函数调度执行

#include <iostream>
using namespace std;


int  j10001(int n);
int main() {
    std::cout << "尘远同学编程-少年班欢迎您! 报名热线 : 025 - 8662 0610" <<std::endl;

    int n,m;
    /*cout<<"enter n : ";
    cin>>n;*/

    for(int n=0;n<30;n++){
        m =j10001(n);
        printf("当有%2d个台阶时,有%2d种走法\n",n,m);
    }

    return 0;
}

执行结果

image.png

扩展

1、规律题解法

2、动态规划的类似题解法

3、背包问题系列解法

相关练习

1、上台阶(每次1、2、3个台阶)