华为OD机试真题---报数游戏


题目描述

有100个人围成一圈,每个人有一个唯一的编号,从1到100。他们从1开始依次报数,当报到某个数m(m也是正整数,且通常小于或等于n)时,该人自动退出圈子,然后下一个人接着从1开始报数,直到剩余的人数小于m。请问最后剩余的人在原先的编号为多少?


输入描述

输入:一个整数m,表示报数的阈值。

输出描述

输出:如果输入参数小于等于1或大于等于100.输出’ERROR‘,否则按照原先的编号从大到小顺序,以英文逗号分割输出编号字符串


代码示例


import java.util.LinkedList;
import java.util.Scanner;public class JosephusProblem {/*** 解决约瑟夫环问题* 从1到100编号的人围成一圈,从1开始依次报数,当报到m时,该人退出圈子,* 下一个人接着从1开始报数,直到剩余的人数小于m。** @param m 报数的阈值* @return 最后剩余的人的编号,按从大到小排序*/public static String solveJosephusProblem(int m) {if (m <= 1 || m >= 100) {return "ERROR";}LinkedList<Integer> people = new LinkedList<>();for (int i = 1; i <= 100; i++) {people.add(i); // 初始化编号为1到100的人}int current = 0; // 当前报数的人的索引while (people.size() >= m) {// 移除报数到m的人current = (current + m - 1) % people.size();people.remove(current);}// 将剩余的人按从大到小排序StringBuilder result = new StringBuilder();for (int i = people.size() - 1; i >= 0; i--) {result.append(people.get(i));if (i > 0) {result.append(",");}}return result.toString();}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int m = scanner.nextInt();scanner.close();String result = solveJosephusProblem(m);System.out.println(result);}
}

代码说明:

  1. 输入处理:读取一个整数m作为报数的阈值。
  2. 有效性检查:如果m小于等于1或大于等于100,则输出’ERROR’并结束程序。
  3. 链表初始化:创建一个链表people,包含从1到100的整数,表示围成一圈的人。
  4. 报数游戏模拟
    • 使用一个索引index来跟踪当前报数到哪个人。
    • 在每次循环中,计算下一个要淘汰的人的索引(使用取模运算来处理循环报数)。
    • 从链表中移除该人。
  5. 输出结果:当链表中只剩下一个人时,输出其编号。

注意事项:

  • 根据题目要求,n的值是固定的(例如100),因此不需要作为输入。
  • 输入参数m的有效范围是(1, 100),不包括1和100本身。
  • 输出应该是最后剩余的人的编号,而不是按某种顺序输出所有人(因为过程中只有一个人会最终留下来)。

代码解释

1、解决约瑟夫环问题 (solveJosephusProblem 方法):
  • 初始化一个 LinkedList 来存储编号为 1 到 100 的人。

  • 使用一个变量 current 来记录当前报数人的索引。

  • 在循环中,每次移动 m 步,移除当前报数到 m 的人。

  • 当剩余人数小于 m 时,停止循环。

  • 将剩余的人按从大到小排序,并用英文逗号分隔。

2、主函数 (main 方法):
  • 读取输入的 m 值。
  • 调用 solveJosephusProblem 方法解决问题。
  • 根据结果输出相应的答案。
  • 这样就可以正确地解决约瑟夫环问题,并按照要求输出结果。

您是对的,我之前的解释有误。让我重新解析一下当输入 m=80 时的运行过程。

代码运行示例

  1. 输入处理

    • 程序从控制台读取一个整数 m,这里 m=80
    • 检查 m 是否在有效范围内(即 1 < m < 100)。由于 m=80 在这个范围内,所以不会返回 "ERROR"
  2. 初始化

    • 创建一个 LinkedList<Integer> 名为 people,用于存储从 1 到 100 的整数,代表 100 个人的编号。
    • 初始化 current 变量为 0,表示当前报数的人的索引(但注意,这里的索引用于访问列表,而报数是从 1 开始的)。
  3. 循环移除

    • people 列表中的人数大于等于 m 时,执行循环。
    • 在每次循环中,计算要移除的人的索引:current = (current + m - 1) % people.size();
      • 这里的计算方式确保了每次从当前索引开始,数到第 m 个人(考虑到索引从 0 开始,而报数从 1 开始,所以加了 m-1)。
      • 使用 % people.size() 是为了防止索引越界。
    • people 列表中移除计算出的索引位置的人。但这里并不是移除 80 个人,而是移除当前索引指向的那个人,其编号恰好是数到 m 时的那个人的编号(在初始情况下,可能是编号为 80 的人,但随着循环的进行,编号会变化)。
  4. 循环结束条件

    • people 列表中的人数少于 m 时,循环结束。
  5. 结果处理

    • 创建一个 StringBuilder 名为 result,用于构建最终的结果字符串。
    • people 列表中剩余的人按编号从大到小添加到 result 中(尽管在这个特定问题中,由于每次移除的是当前数到 m 的那个人,所以剩余的人的顺序可能并不是严格按照从大到小或从小到大的,但在这个例子中,由于 m 较大,循环很快结束,所以留下的人基本上是按照初始顺序的)。不过,代码中的排序逻辑实际上是多余的,因为在这个问题中并不需要排序。
  6. 输出

    • result 转换为字符串并输出。

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

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

相关文章

机器人末端的负载辨识

关节处的摩擦力变小了&#xff0c;导致系统的参数辨识精度会变高&#xff0c;因为动力学方程中的摩擦力项占的比例会变小。 为什么要有一个负载的参数辨识&#xff0c;因为对于整个系统来说&#xff0c;除了负载哈&#xff0c;其他关节都是不变的&#xff0c;出厂时都设置好了&…

Java基础-知识点

文章目录 数据类型包装类型缓存池 String概述不可变的含义不可变的好处String、StringBuffer、StringBuilderString.intern() 运算参数传递float与double隐式类型转换switch 继承访问权限抽象类与接口super重写与重载**1. 重写(Override)****2. 重载(Overload)** Object类的通用…

FFMPEG数据封装格式、多媒体传输协议、音视频编解码器

FFMPEG堪称自由软件中最完备的一套多媒体支持库&#xff0c;它几乎实现了所有当下常见的数据封装格式、多媒体传输协议以及音视频编解码器&#xff0c;提供了录制、转换以及流化音视频的完整解决方案。 ffmpeg命令行参数解释 ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出…

速通!腾讯发布《2024大模型十大趋势》

【写在前面】 腾讯发布的《2024大模型十大趋势》报告在2024世界人工智能大会上引起了广泛关注。该报告深入分析了人工智能领域的最新进展&#xff0c;特别是大模型技术在不同应用场景中的潜力和影响&#xff0c;并预测了未来人工智能的发展方向。 “大模型技术发展方向 大模型…

深入理解HTTP Cookie

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 HTTP Cookie定义工作原理分类安全性用途 认识 cookie基本格式实验测试 cookie 当我们登录了B站过后&#xff0c;为什么下次访问B站就…

光伏电站灰尘监测系统的工作原理

型号&#xff1a;TH-HS1】光伏电站灰尘监测系统是一种专门用于监测光伏电站内部灰尘积累情况的系统&#xff0c;通过安装在太阳能电池板表面的传感器&#xff0c;实时收集电池板表面的灰尘信息&#xff0c;包括灰尘厚度、污染比、洁净比等&#xff0c;并将这些数据发送到中央处…

杨中科 ASP.NETCORE 异步编程二

一、不要用sleep() 如果想在异步方法中暂停一段时间&#xff0c;不要用Thread.sleep()&#xff0c;因为它会阻塞调用线程&#xff0c;而要用await.Task.Delay()。 举例: 下载一个网址,3秒后下载另一个 示例&#xff1a; sleep() 为了能直观看到效果&#xff0c;使用winfor…

【STM32开发之寄存器版】(八)-定时器的编码器接口模式

一、前言 1.1 编码器接口原理 编码器模式主要用于检测旋转编码器的转动方向和转动速度。旋转编码器一般输出两路相位相差90度的脉冲信号&#xff08;称为A相和B相&#xff09;&#xff0c;通过这两路信号&#xff0c;定时器可以判断编码器的旋转方向&#xff0c;并计数转动的脉…

新同事半天搭建了一套CRM系统,实力赢得老板青睐直接转正

我们都知道&#xff0c;搭建一套CRM系统&#xff0c;根据功能和数据的复杂性&#xff0c;一般需要2至4周才能完成。最近&#xff0c;我们团队新来了一位同事&#xff0c;之前做过产品&#xff0c;没写过代码。老板安排他试试能不能搭建一套CRM系统&#xff0c;主要用于市场部同…

【学术会议征稿】第五届应用力学与机械工程国际学术会议(ICAMME 2024)

第五届应用力学与机械工程国际学术会议&#xff08;ICAMME 2024&#xff09; 2024 5th International Conference on Applied Mechanics and Mechanical Engineering 在全球技术快速发展的背景下&#xff0c;应用力学和机械工程作为推动现代工业创新的根基&#xff0c;持续展…

解决html2canvas图片模糊不清,超出一页长截图问题

前言 最近需要做一个页面截图功能&#xff0c;类似QQ、微信截图功能&#xff0c;核心是将Html网页转换成图片格式&#xff0c;并且尽可能保证截图后图片样式和原网页一致。对比了一些第三方插件以及浏览器自带的API&#xff0c;最终选择使用JavaScript库‌&#xff1a;如html2…

【读书笔记·VLSI电路设计方法解密】问题7:什么是基于标准单元的专用集成电路 (ASIC) 设计方法论

标准单元方法论是一种基于预组装库单元的芯片设计方法。该库中包含的标准单元和宏单元(例如存储器、I/O、特殊功能单元、锁相环(PLLs)等)已经在预定的工艺节点中设计、布局并经过验证。这些单元经过完全表征,并在逻辑、时序、物理和电气模型方面进行了定义,并正确地打包在…

【学术会议征稿】2024年智能通信、感知与电磁学术会议(ICSE 2024)

2024年智能通信、感知与电磁学术会议&#xff08;ICSE 2024&#xff09; 2024 International Conference on Intelligent Communication, Sensing and Electromagnetics 2024年智能通信、感知与电磁学术会议&#xff08;ICSE 2024&#xff09;将于2024年12月13-15日在中国-广…

【AI系统】AI在不同领域的应用与行业影响

本文将探讨AI在不同技术领域和行业中的广泛应用&#xff0c;以及这些应用如何影响和改变我们的世界。 I. 引言 AI技术正日益渗透到各个技术领域&#xff0c;从计算机视觉到自然语言处理&#xff0c;再到音频处理&#xff0c;AI的应用正变得越来越广泛。这些技术的发展不仅推动…

TMtech凯珏LED驱动芯片T8332AD升降压线性

T8332AD 是 TM Technology, Inc. 设计的一款多功能 LED 驱动 IC。它具有广泛的输入电压范围、精确的恒流控制和多种保护机制&#xff0c;非常适合各种大功率 LED 应用。以下是其主要特点、应用和技术规格的概述。 主要特点 1. 宽输入电压范围&#xff1a;在 5V 到 60V 之间高…

平衡树 BTree和B+Tree

B树索引是B树在数据库中的一种实现&#xff0c;是最常见也是数据库中使用最为频繁的一种索引。B树中的B代表平衡&#xff08;balance&#xff09;&#xff0c;而不是二叉&#xff08;binary&#xff09;&#xff0c;因为B树是从最早的平衡二叉树演化而来的。在讲B树之前必须先了…

41 | 单例模式(上):为什么说支持懒加载的双重检测不比饿汉式更优?

从今天开始&#xff0c;我们正式进入到设计模式的学习。我们知道&#xff0c;经典的设计模式有 23 种。其中&#xff0c;常用的并不是很多。据我的工作经验来看&#xff0c;常用的可能都不到一半。如果随便抓一个程序员&#xff0c;让他说一说最熟悉的 3 种设计模式&#xff0c…

2015年国赛高教杯数学建模C题月上柳梢头解题全过程文档及程序

2015年国赛高教杯数学建模 C题 月上柳梢头 月上柳梢头&#xff0c;人约黄昏后”是北宋学者欧阳修的名句&#xff0c;写的是与佳人相约的情景。请用天文学的观点赏析该名句&#xff0c;并进行如下的讨论&#xff1a;   1. 定义“月上柳梢头”时月亮在空中的角度和什么时间称为…

SOMEIP_ETS_177: SD_Unused_data_after_Options_Array_wrong_length

测试目的&#xff1a; 验证DUT能够正确处理单播SubscribeEventgroup请求&#xff0c;该请求在末尾包含未使用的有效载荷数据&#xff0c;且这些数据的长度不包括在SOME/IP长度字段中&#xff0c;并对此发送SubscribeEventgroupAck消息。 描述 本测试用例旨在确保DUT遵循SOME…