华为OD机试真题 JavaScript 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

news/2024/7/24 2:32:53

在这里插入图片描述

一、题目描述

跳房子,也叫跳飞机,是一种世界性的儿童游戏。

游戏参与者需要分多个回合按顺序跳到第1格直到房子的最后一格,然后获得一次选房子的机会,直到所有房子都被选完,房子最多的人获胜。

跳房子的过程中,如果有踩线等违规行为会结束当前回合,甚至可能倒退几步。

假设房子的总格数是count,小红每回合可能连续跳的步数都放在数据steps中,请问数组中是否有一种步数的组合,可以让小红三个回合跳到最后一格?如果有,请输出索引和最小的步数组合,数据保证索引和最小的步数组合是唯一的。

注意:数组中的步数可以重复,但数组中的元素不能重复使用。

二、输入描述

第一行输入为房子总格数count,它是整数类型int。

第二行输入为每回合可能连续跳过的步数,它是整数数组类型。

三、输出描述

返回索引和最小满足要求的步数组合。

注意:顺序保持steps中的原有顺序。

四、补充说明

  • count <= 10000;
  • 3 <= steps.length <= 10000;
  • -100000 <= steps[i] <= 100000;

五、解题思路

这道题的【题目描述】优点复杂,说的也不是很清晰。

简而言之,就是:

第一行输入一个数count;

第二行输入若干个数steps;

将第二行中的数字,以任意组合的方式(保证三个回合跳到最后一格),等于count即可,看看一共有多少种,然后选出索引和最小的那一组数据,按顺序输出即可

万丈高楼平地起,稳扎稳打,先理清思路,找准方向,再动手。

  1. 输入房子总格数count;
  2. 输入每回合可能连续跳过的步数;
  3. 递归选出索引和最小的那一组数据;
    • 遍历steps数组中的数字,每三个数字进行依次递归;
    • 如果不满足条件,将第三个数字删除,再添加一个新的数字;
    • 再比较小红跳的步数集合是否等于count;
    • 循环往复
  4. 小红跳的步数集合等于count 且 选出索引和最小的那一组数据;
  5. 返回索引和最小满足要求的步数组合;

六、JavaScript算法源码

let min = 100000; // 最小索引和
const three = 3; // 三个回合跳到最后一格
let count; // 房子总格数count
let minIndexList; // 选出索引和最小的那一组数据function calculate(count, steps) {getMinSteps(count, steps, three, [], [], 0);return minIndexList;
}function getMinSteps(count, steps, step, list, indexList, index) {// 三个回合跳到最后一格if (step === 0) {let total = 0;let indexTotal = 0;// 三个回合跳到最后一格for (let i = 0; i < three; i++) {total += list[i];// 计算索引和indexTotal += indexList[i];}// 小红跳的步数集合等于count 且 选出索引和最小的那一组数据if (total === count && indexTotal < min) {min = indexTotal;minIndexList = [...list];// 打印符合要求的小红跳的步数集合和下角标之和console.log("符合要求的小红跳的步数集合:" + list);console.log("下角标之和:" + indexTotal);}} else {// 遍历steps数组for (let i = index; i < steps.length; i++) {// 小红跳的步数集合list.push(steps[i]);// 小红跳的步数的索引集合indexList.push(i);// 选出索引和最小的那一组数据getMinSteps(count, steps, step - 1, list, indexList, i + 1);// 遍历steps数组中的数字,每三个数字进行依次递归,如果不满足条件,将第三个数字删除,再添加一个新的数字,再比较小红跳的步数集合是否等于count,循环往复list.pop();indexList.pop();}}
}

七、效果展示

1、输入

15
1,9,4,25,10,8,7,5

2、输出

[1, 4, 10]

3、说明

符合条件的步数集合有

[1, 9, 5]

它的下角标之和为:0 + 1 + 7 = 8

[1, 4, 10]

它的下角标之和为:0 + 2 + 4 = 6

因为 6<8,故输出[1, 4, 10]。

在这里插入图片描述


🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)

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

在这里插入图片描述


http://wed.xjx100/news/301238.html

相关文章

使用Unity开发一个独立的区块链

Arouse Blockchain [Unity独立区块链] ❗️千万别被误导&#xff0c;上图内容虽然都在项目中可寻&#xff0c;但与目前区块链的业务代码关联不大&#xff0c;仅供宣传作用(总得放些图看着好看)。之所以有以上内容是项目有个目标功能是希望每个用户在区块链上都有一个独一无二的…

表级锁和行级锁

介绍 为什么有事务隔离性&#xff1f;因为要并发执行&#xff0c;数据安全性和一致性和并发效率问题 串行化&#xff1a;锁实现&#xff0c;没有并发性 用的多的是可重复读&#xff08;mysql&#xff09;和已提交读&#xff08;oracle&#xff09;&#xff0c;因为权衡了数据…

5、共享模型之内存

目录 5.1 Java的内存模型5.2 可见性1、退不出的循环2、解决办法&#xff1a;3、可见性 vs 原子性 5.3 有序性1、为什么会有指令重排2、如何禁止指令重排3、原理之volatile4、happens-before 5.1 Java的内存模型 JMM 即 Java Memory Model&#xff08;Java内存模型&#xff09;…

控制并发流程,做好线程间的协调

一、概述 1. 什么是控制并发流程&#xff1f; 线程一般是由线程调度器自动控制的&#xff0c;但有些场景需要按照我们程序员的意愿去实现多线程之间相互配合&#xff0c;从而满足业务逻辑。比如&#xff1a; 让线程A等待线程B执行完后再执行等一些相互合作的逻辑&#xff1b…

MP : Human Motion 人体运动的MLP方法

Back to MLP: A Simple Baseline for Human Motion Prediction conda install -c conda-forge easydict 简介 papercodehttps://arxiv.org/abs/2207.01567v2https://github.com/dulucas/siMLPe Back to MLP是一个仅使用MLP的新baseline,效果SOTA。本文解决了人类运动预测的问…

通过构造方法使属性初始化

1 问题 如何使属性初始化。 2 方法 在Student类中定义两个构造方法publicStudent(String name)和public Student(String name,int score)。在使用new运算符创建对象&#xff0c;由于实际参数是一个String类型的数据"林冲"&#xff0c;因此在实例化时会调用有一个Stri…

使用CloudOS帮助企业落地云原生PaaS平台

PaaS究竟是什么&#xff1f; IaaS、SaaS的定义很清楚&#xff0c;而PaaS的定义就比较宽泛。所以&#xff0c;很多人把PaaS当做一个万能的“框”&#xff0c;什么都往里装&#xff0c;特别像一排垃圾桶中的那个“其他垃圾”桶&#xff0c;当你拎了一袋垃圾&#xff0c;不知道往…

Vue中如何进行颜色选择与调色板

Vue中如何进行颜色选择与调色板 颜色选择和调色板是Web开发中常用的功能&#xff0c;它们可以帮助用户选择或调整颜色。Vue作为一个流行的JavaScript框架&#xff0c;提供了一些工具和库&#xff0c;可以方便地实现颜色选择和调色板功能。本文将介绍如何在Vue中进行颜色选择和…