首先读题:

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

解题思路: 

        假设共有M级,所在位置为Z级,共有N种走法 需要跨过的台阶数量为M-Z   由题意Z=1,每次只能+1或+2,当Z=M时走完全程:

                                        则有:

                                                 M=1时   M-Z=0(不需要向上)          位置不变                                                                            N=1

                                                 M=2时   M-Z=1(需要向上一级)       只能向上跨一级     Z+1=M                                                N=1

                                                 M=3时   M-Z=2(需要向上二级)       有且只有二种走法     Z+1+1=M或Z+2=M                        N=2

                                                 M=4时   可先跨一级,此时Z=2,M-Z=2,则下一步有二种走法    Z+1+1=M或Z+2=M     N1=2

                                                               或先向上二级,此时Z=3,M-Z=1,则下一步有一种走法    Z+1=M     N2=1                  N=N1+N2=3

                                                 以此类推:

                                        即每踏上新的一级,当(剩余台阶数量)M-Z<=1时,仅对于下一步来说,有一种走法,否则有两种走法。

 定义函数如下

int zf(int m){
    if(m<=2){    //即M-Z<=1
        return 1;   
    }else{
        return zf(m-1)+zf(m-2);
    }
}

动态规划:

    设f(x)表示爬到第x级台阶的方案数,以逆向思维来看,最后一步可能跨越了1级,也可能跨越了两级.

                      则:            f(x)=f(x−1)+f(x−2)

即:爬到第x级台阶的走法是爬到第x-1级和第x-2级的走法数的和;

其中f(1)=1        f(2)=1        f(3)=f(1)+f(2)=2        f(4)=f(2)+f(3)=3

定义函数如下:

int zf(int m){
    int x=0,y=1,r=0;
    for(int i=1;i<m;i++){
    r=x+y;
    x=y;
    y=r;
    }
    return r;
}
点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论