华为OD机试真题 Java 实现【猴子爬山】【2023 B卷 100分】,附详细解题思路-LMLPHP

一、题目描述

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

二、输入描述

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

三、输出描述

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

四、解题思路

题目要求计算猴子通过一个有N个台阶的阶梯时,有多少种不同的跳跃方式,每次只能跳1步或跳3步。

我们可以使用递归的方式来解决这个问题。

具体步骤如下:

  1. 读取输入的整数N,表示阶梯的个数;
  2. 检查输入的有效性,如果N不在范围0<N<=50之内,输出错误提示并结束程序;
  3. 调用calculation函数计算猴子跳跃的方式数,并将结果输出;

calculation函数的实现如下:

  1. 如果剩余的台阶数小于3,即只剩一个或两个台阶,那么只有一种跳跃方式,返回1。
  2. 对于剩余的台阶数大于等于3的情况,我们可以将问题拆分为两种情况:
    • 跳一步:猴子跳过一个台阶,剩余的台阶数减1,递归调用calculation函数计算剩余台阶的跳跃方式数;
    • 跳三步:猴子跳过三个台阶,剩余的台阶数减3,递归调用calculation函数计算剩余台阶的跳跃方式数;
  3. 将跳一步和跳三步的方式数相加,即为总的跳跃方式数,返回结果。

该算法使用递归的方式计算猴子跳跃阶梯的方式数。每次递归将问题拆分为两种情况,跳一步和跳三步,并将它们的结果相加。

算法的时间复杂度为O(2n),其中n为台阶的个数。每次递归调用都会分成两个子问题,因此递归树的节点数为2n。需要注意的是,该算法存在重复计算的情况,可以通过动态规划或记忆化搜索进行优化。

五、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int input = sc.nextInt();

    if(input<=0 || input > 50){
        System.out.println("请输入0到50之间的数字");
        return;
    }

    System.out.println(calculation(input));
}
private static int calculation(int step){
    //只剩一个台阶了
    if (step < 3){
        return 1;
    }
    //剩下的场景都需要分成当前跳1步或者跳3步
    return calculation(step -1) + calculation( step -3);
}

六、效果展示

华为OD机试真题 Java 实现【猴子爬山】【2023 B卷 100分】,附详细解题思路-LMLPHP


🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

华为OD机试真题 Java 实现【猴子爬山】【2023 B卷 100分】,附详细解题思路-LMLPHP

06-04 15:35