华为OD机试真题 JavaScript 实现【报数游戏】【2022Q4 100分】

news2024/11/26 11:48:08

在这里插入图片描述

一、题目描述

100个人围成一圈,每个人有一个编码,编号从1开始到100。他们从1开始依次报数,报到为M的人自动退出圈圈,然后下一个人接着从1开始报数,直到剩余的人数小于M。请问最后剩余的人在原先的编号为多少?

二、输入描述

输入一个整数参数M。

三、输出描述

如果输入参数M小于等于1或者大于等于100,输出“ERROR!”;否则按照原先的编号从小到大的顺序,以英文逗号分割输出编号字符串。

四、解题思路

我们可以使用模拟的方法来解决这个问题。首先,我们将100个人的编号存储在一个映射表中,编号从1到100。然后,从1开始按顺时针方向报数,每次报数到M时,将对应的编号从映射表中移除。重复这个过程,直到剩余的人数小于M。最后,输出剩余人的编号。

具体步骤如下:

  1. 读取输入的参数M;
  2. 如果M小于等于1或者大于等于100,输出"ERROR!"并结束程序;
  3. 创建一个映射表map,将100个人的编号存储在映射表中,编号从1到100;
  4. 初始化变量start为1,表示报数的起始值;
  5. 使用while循环,循环条件为映射表的大小大于等于M:
    • 创建一个迭代器iterator,遍历映射表;
    • 在迭代过程中,获取当前键值对的键和值;
    • 将当前键的值更新为start的值;
    • 如果当前值等于M,表示报数到M,将该键从映射表中移除,并将start重置为1;
  6. 使用StringBuilder构建结果字符串;
  7. 遍历映射表中的键值对,将键添加到结果字符串中,并在每个编号后面添加英文逗号;
  8. 删除结果字符串最后一个逗号;
  9. 输出结果字符串。

该算法使用模拟的方法解决约瑟夫环变形问题,按照题目要求进行报数和移除操作,直到剩余的人数小于M。最后输出剩余人的编号。算法的时间复杂度主要取决于循环的次数,由于最多循环100次,因此时间复杂度为O(1)。

五、JavaScript算法源码

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.question('请输入参数M:', M => {
    const result = josephusProblem(parseInt(M));
    console.log(result);
    rl.close();
});

function josephusProblem(M) {
    if (M <= 1 || M >= 100) {
        return 'ERROR!';
    }

    const map = new Map();
    for (let i = 1; i <= 100; i++) {
        map.set(i, i);
    }

    let start = 1;
    while (map.size >= M) {
        const iterator = map.entries();
        for (const [key, value] of iterator) {
            map.set(key, start++);
            if (value === M) {
                map.delete(key);
                start = 1;
            }
        }
    }

    const result = Array.from(map.keys()).join(',');
    return result;
}

六、效果展示

在这里插入图片描述


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

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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/649803.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu 更新 CMake 版本

项目中有时候会出现CMake版本小于最低要求的情况,实际上没有有必要这么高的要求,但是在不能改对方代码的情况下,只能去升级自身的版本了. 尝试了网上说的直接update之后再次安装的方式,结果版本号没有改变 sudo apt-get update sudo apt-get remove cmake sudo apt-get ins…

Rust语言从入门到入坑——(3)小谈Cargo工具以及VScode配置Rust

文章目录 0 引入1、Cargo 是什么2、常用Cargo指令3、VScode配置Rust环境3.1.tasks.json3.2.launch.json 4、总结 0 引入 上一节我们谈了在编译工程的时候用到Cargo&#xff08;卡狗&#xff09; 1、Cargo 是什么 Cargo 是 Rust 的构建系统和包管理器。 Rust 开发者常用 Carg…

Metricbeat安装下载,nginx模块使用

目录 MetricbeatMetricbeat组成下载启动Metricbeat Modulesystem module配置内容 Nginx Module开启Nginx Module 配置nginx module测试 Metricbeat 定期收集操作系统或应用服务的指标数据存储到Elasticsearch中&#xff0c;进行实时分析 Metricbeat组成 Metricbeat有2部分组成…

Jmeter性能测试步骤入门

目录 前言&#xff1a; 一、Jmeter简介 1 概述 2 JMeter支持的协议 二、Jmeter实现性能测试 第一步&#xff1a;配置jdk环境 第二步&#xff1a;下载jmeter 第三步&#xff1a;启动Jmeter 四、一个http还除了上述http请求中的请求行和请求体&#xff0c;还包含请求头&#xff…

Android使用AspectJ拦截点击事件

介绍&#xff1a; AspectJ是一种AOP框架&#xff0c;它可以在编译时或运行时拦截指定的方法。在Android开发中&#xff0c;我们可以使用AspectJ来拦截UI事件并执行自己的业务逻辑。本文将说明如何使用AspectJ来拦截Android应用程序中的点击事件&#xff0c;并附有详细的代码注…

存储池和LUN

存储池是什么意思 存储池是为集体存储共享置备的存储卷的集合。这些池建立在物理存储设备的聚合上&#xff0c;根据资源需求进行隔离&#xff0c;然后由共享环境中的各种计算机或系统使用。存储池可以分为三类&#xff0c;每类都有不同的用途;主存储池、副本存储池和活动数据池…

618来了!看图技术如何在物流管理系统大显身手!

导读 近日&#xff0c;随着电商“618”购物节的临近&#xff0c;各大商家纷纷推出各类补贴活动刺激消费者热情。下单后&#xff0c;消费者的心理活动如何呢&#xff1f;蹲点抢到优惠券&#xff0c;精打细算的凑单后&#xff0c;终于完成付款。焦急的等待待发货的小红点跳至待收…

分享三个java低代码开发平台,每个都很能打,建议收藏!

来讲讲近期比较流行的低代码开发平台一词。低代码的目的是将可重复性的编程工作通过平台实现&#xff0c;将开发人员从没有技术含量的增删改查开发中解放出来&#xff0c;让其专注于更有价值的开发工作&#xff0c;例如业务建模、数据库设计、流程设计、API核心开发、业务逻辑开…

如何调用百度地图API

前言 要调用百度地图API&#xff0c;步骤操作如下 注册并创建一个API密钥。您可以在百度地图API控制台上创建您的密钥。选择要使用的API服务。百度地图API提供了多种服务&#xff0c;包括地图展示、路线规划、地点搜索、实时交通等。您可以在百度地图API控制台上查看所有可用…

大数据hadoop生态技术简介

Hadoop 生态是指围绕 Hadoop 大数据处理平台形成的一系列开源软件和工具&#xff0c;用于支持大规模数据处理、存储、管理、分析和可视化等应用场景。暂时将其核心技术分为9类&#xff1a; 数据采集技术框架&#xff1a; Flume、Logstash、FileBeat&#xff1b;Sqoop和Datax&…

【Spring】循环依赖

一、什么情况下会出现循环依赖&#xff1f; 二、解决方案 &#xff08;一&#xff09;一级缓存&#xff1a;存放完整的Bean实例对象 缺点&#xff1a;一级缓存的方式无法保证多线程下的一级缓存Bean的完整性&#xff0c;可以用加锁的方式来解决此问题。 &#xff08;二&#…

Nerf如何制作自己的llff数据集

Nerf三维重建使用Pycharm运行自己的数据集 ------------------------------------20230427更新---------------------------------------------- Nerf代码讲解&#xff0c;从零简单复现论文代码 Nerf环境配置教程 你好&#xff01; 这里是“出门吃三碗饭”本人&#xff0c;本…

数字化时代,数据治理中有哪些误区?

数据治理也不是什么简单的事情&#xff0c;或者说企业想要利用数据资产、数字化、数字化转型等加速企业的发展&#xff0c;就势必会在路途中遇到很多困难&#xff0c;数据治理只是用来解决数据问题的一种方案。所以当数据的价值开始被不断挖掘&#xff0c;企业数据资产的地位越…

分析了上百份最新的大中小厂的面经,我总结出了这份2023国内最新最强Java面试八股文

最近分析了上百份最新的大中小厂的面经&#xff0c;整理了 Java 面试中最最最常问的一些问题&#xff01;大家可以对照着这篇文章学习或者准备面试。 开始之前&#xff0c;先说一下我非常推荐的一种学习方式&#xff1a; 带着问题学习或者准备面试。 之前分享过一位字节朋友的…

数据预处理:标准化、正则化、最大最小归一化、绝对值标准化

https://scikit-learn.org/stable/modules/preprocessing.html 标准化 公式 &#xff1a; 优点&#xff1a;适用大多数类型的数据&#xff0c;标准化之后的数据是以0为均值&#xff0c;方差为1的正态分布 缺点 &#xff1a;是一种中心化方法&#xff0c;会改变原有数据得分…

《离散数学》:集合、关系和函数

〇、前言 这章将会对集合、以及集合之上的关系、以及两个集合之间的映射情况做一个细致的讨论。集合作为数学和其他领域中的基础概念&#xff0c;具有广泛的应用和重要的地位。它为数学建立了基本的体系和推理方法&#xff0c;为各个领域的研究和应用提供了一种统一的描述和分…

DDD领域驱动

为什么需要DDD&#xff1f; 我们经常讲技术为业务服务&#xff0c;架构设计需要对业务充分理解&#xff0c;在面向复杂的业务场景时&#xff0c;会面临诸多问题&#xff1a; 复杂系统设计&#xff1a;业务系统多、业务类型多、业务相互耦合&#xff0c;有没有合适的方法来指导…

深度分析高性能计算工程师和传统互联网开发有何不同?

数字化时代来袭&#xff0c;各类开发工程师层出不穷。在移动互联网时代&#xff0c;互联网开发享用了10年的行业红利&#xff1b;在即将到来的超算互联网时代、数字化浪潮汹涌而来的时代&#xff0c;高性能计算工程师这个原本在科研院所熠熠生辉的工程师群体也从技术的神坛走下…

刁钻面试问题?超全接口测试面试题总结+答案,面试看这篇就够了

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 面试题&#xff1…

通过Xshell连接远程服务器搞懂SSH非对称加密的实际应用

最近阿里云服务器即将到期&#xff0c;正好618入手了腾讯云很便宜的轻量级服务器&#xff0c;之前阿里云服务器远程控制都是用Xshell密码登录&#xff0c;这次腾讯云试了试SSH免密登录&#xff0c;还是很好用的&#xff0c;正好借这个机会研究了下SSH原理 SSH是“非对称加密”…