当前位置: 首页 > news >正文

报数游戏问题

一、题目描述

100个人围成一圈,每个人有一个编码,编号从1开始到100。

他们从1开始依次报数,报到为M的人自动退出圈圈,然后下一个人接着从1开始报数,直到剩余的人数小于M。

请问最后剩余的人在原先的编号为多少?

二、输入输出描述

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

三、示例

输入

3

输出58,91
说明输入M为3,最后剩下两个人。
输入

4

输出34,45,97
说明输入M为4,最后剩下三个人。

四、解题思路

1. 核心思想

使用链表 + 迭代器模拟循环报数淘汰过程,遍历节点时动态删除被淘汰的人,直到剩余人数<M,最后排序输出结果。

2. 问题本质分析

这是一个循环报数删除问题(约瑟夫环)

  • 对象:1~100 连续编号
  • 规则:循环报数,报到 M 淘汰
  • 停止条件:剩余人数 < M
  • 输出:剩余编号从小到大
  • 本质:循环遍历 + 动态删除 + 结果排序

3. 核心逻辑

  1. 输入校验:M 必须是 2~99,否则报错
  2. 链表存储:用 LinkedList 存 1~100,方便删除
  3. 迭代器遍历:支持循环遍历 + 中途删除节点
  4. 报数淘汰:每报数到 M,删除当前人,计数器归零
  5. 停止条件:链表大小<M 时停止淘汰
  6. 排序输出:剩余编号升序,逗号拼接

4. 步骤拆解

  1. 输入与校验

    • 读取 M
    • 不在 2~99 直接输出 ERROR
  2. 初始化数据

    • 生成 1~100 编号,存入 LinkedList
  3. 循环淘汰

    • 迭代器遍历,逐个报数
    • 报到 M 就删除,计数器归零
    • 直到人数<M 停止
  4. 结果处理

    • 剩余编号升序排序
    • 拼接成逗号分隔格式
    • 输出字符串

五、代码实现

import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int M = sc.nextInt(); // 非法判断 if (M <= 1 || M >= 100) { System.out.println("ERROR!"); return; } // 初始化 1~100 编号 LinkedList<Integer> list = new LinkedList<>(); for (int i = 1; i <= 100; i++) { list.add(i); } int count = 0; // 当前报数 // 剩余人数 >= M 就继续淘汰 while (list.size() >= M) { ListIterator<Integer> it = list.listIterator(); while (it.hasNext() && list.size() >= M) { it.next(); count++; // 报到 M 就删除 if (count == M) { it.remove(); count = 0; // 下一个从 1 开始 } } } // 排序(题目要求按编号从小到大输出) Collections.sort(list); // 输出格式拼接 StringBuilder sb = new StringBuilder(); for (int num : list) { sb.append(num).append(","); } if (sb.length() > 0) { sb.deleteCharAt(sb.length() - 1); } System.out.println(sb); } }
http://www.jsqmd.com/news/807643/

相关文章:

  • 深蓝词库转换:输入法词库迁移的终极免费解决方案
  • 程序员爸爸用React+Node.js+AI打造游戏化育儿系统,两周搞定习惯养成
  • 物联网设备如何从连接迈向智慧:边缘计算与数据融合实战解析
  • Spring AI Session API:大多数人用 ChatMemory 用错了场景
  • 徐州ISO9001质量管理体系机构排行:5家合规机构盘点 - 奔跑123
  • Xendit支付网关MCP服务端:东南亚支付集成的架构设计与工程实践
  • Shell脚本错误处理实战:用sh-guard提升Bash脚本健壮性
  • 打破虚拟化壁垒:VMware Unlocker如何让macOS在Windows/Linux上重生
  • PrismLauncher-Cracked:终极离线Minecraft启动器完整指南
  • 如何为你的设计作品注入米哈游游戏的神秘文字风格?
  • iFakeLocation终极指南:如何在3分钟内实现iOS虚拟定位(无需越狱)
  • 管道工程必看避坑指南粮油储罐通气帽选型要点
  • c语言的入门指南(包含visual Studio下载方式)
  • 参数权重×语义分层×风格隔离,深度拆解MJ v8风格控制三重门控机制,附官方未公开beta指令表
  • AI智能体如何革新LaTeX写作:PaperDebugger深度集成Overleaf实践
  • 前后端分离人口老龄化社区服务与管理平台系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • VMware macOS解锁器3.0:架构深度解析与技术实现方案
  • 麦格纳收购维宁尔:协同驾驶技术如何重塑汽车智能化投资逻辑
  • 从IMU到GPS:手把手教你用ESKF实现机器人定位(附代码避坑指南)
  • 番茄小说下载器:三步搭建你的个人离线图书馆终极指南
  • Cursor编辑器自动化开发环境配置:Prettier+ESLint+Husky实战指南
  • LinkedIn命令行工具linkedin-cli:自动化人脉管理与技术实现详解
  • 不用OWL/RDF!Function 和 Action 在本体智能平台中的重要性体现
  • 基于Tauri构建跨平台桌面应用:从lencx/nofwl项目看现代工作台开发实践
  • 抖音内容备份革命:如何用开源工具3分钟搞定无水印批量下载?
  • 请解释 Shell 脚本中的管道(Pipeline)机制及其应用
  • 基于MCP与Apify的学术商业化情报引擎:AI驱动的技术侦察实践
  • LLM实战指南:从本地部署到微调,资深开发者的资源选型与避坑经验
  • KEEL框架:用文件系统解决AI编码代理的上下文遗忘问题
  • IDE集成AI事故调查:Antimetal Skills插件实战指南