Java 华为真题-猴子爬山

需求:

一天一只顽猴想去从山脚爬到山顶,途中经过一个有个N个台阶的阶梯,但是这猴子有一个习惯:每一次只能跳1步或跳3步,试问猴子通过这个阶梯有多少种不同的跳跃方式?
输入描述

输入只有一个整数N(0<N<=50)此阶梯有多少个台阶。

输出描述

输出有多少种跳跃方式(解决方案数)。

输入

3

输出

2

输入

50

输出

122106097

分析:

上山最后一步到达第50级台阶,完成上山,共有f(50)种不同的爬法,

到第50级之前位于哪一级呢?无非是位于第49级(上跳1级即到),有f(49)种;

或位于第48级(上跳3级即到),有f(48)种,于是:

f(50)=f(49)+f(47)

f(49)= f(48)+f(46)

f(48)= f(47)+f(45)

依次类推

以此类推,一般地有递推关系:

f(n)=f(n-1)+f(n-3) (n>3)

初始条件:

f(1)=1,即1=1;

f(2)=1,即2=1+1(注意:跳法中不允许直接跳2级);

f(3)=2,即3=1+1+1,3=3;

故此递推设计比较简单,时间复杂度为O(n)

编码:

复制代码
public class TestDump {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入阶梯数:");
        int num=scanner.nextInt();
        System.out.println(showF(num));
    }

    /**
     * 递归算法f(n) = f(n-1) + f(n-3);
     * f(1) =1;f(2) =1;f(3) = 2
     */
    public static long showF(int n) {
        if (n == 1 || n == 2) {
            return 1;
        }
        if (n == 3) {
            return 2;
        }
        return showF(n - 1) + showF(n - 3);
    }
}

效果:

相关推荐
小灰灰__3 分钟前
IDEA加载通义灵码插件及使用指南
java·ide·intellij-idea
夜雨翦春韭7 分钟前
Java中的动态代理
java·开发语言·aop·动态代理
JavaPub-rodert13 分钟前
鸿蒙生态崛起:开发者的机遇与挑战
华为·harmonyos
程序媛小果27 分钟前
基于java+SpringBoot+Vue的宠物咖啡馆平台设计与实现
java·vue.js·spring boot
AI街潜水的八角30 分钟前
基于C++的决策树C4.5机器学习算法(不调包)
c++·算法·决策树·机器学习
追风林33 分钟前
mac m1 docker本地部署canal 监听mysql的binglog日志
java·docker·mac
芒果披萨1 小时前
El表达式和JSTL
java·el
白榆maple1 小时前
(蓝桥杯C/C++)——基础算法(下)
算法
JSU_曾是此间年少1 小时前
数据结构——线性表与链表
数据结构·c++·算法
duration~1 小时前
Maven随笔
java·maven