有n个人编号为1~n,排成一个环,从1号人开始从1到m报数,报到m的人离开该环,从下一个人开始继续从1到m报数,报到m的人离开该环,这样一直进行下去,直到最终剩余p个人。
从键盘输入n、m、p,要求n>=2、m>=2、1<=p<n,输出最终剩余的p个初始编号。例如:输入n、m、p依此为,4、3、2,则输出为1和4。
约瑟夫环问题,需要帮助
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 瞬间的未来式 2023-06-26 10:17关注
该回答引用chatgpt:
package com.school; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class JosephusCircle { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入总人数n:"); int n = scanner.nextInt(); System.out.print("请输入报数上限m:"); int m = scanner.nextInt(); System.out.print("请输入最终剩余人数p:"); int p = scanner.nextInt(); // 创建初始编号列表 List<Integer> people = new ArrayList<>(); for (int i = 1; i <= n; i++) { people.add(i); } int index = 0; // 当前报数的人在列表中的索引 while (people.size() > p) { // 报数m次 for (int i = 1; i < m; i++) { index = (index + 1) % people.size(); // 环形取余 } // 移除报到m的人 people.remove(index); } // 输出最终剩余的人 System.out.println("最终剩余的" + p + "个人的初始编号为:"); for (int i = 0; i < p; i++) { System.out.println(people.get(i)); } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 webstorm上开发的vue3+vite5+typeScript打包时报错
- ¥15 vue使用gojs,需求在link中的虚线上添加方向箭头
- ¥15 CSS通配符清除内外边距为什么可以覆盖默认样式?
- ¥15 SPSS分类模型实训题步骤
- ¥15 求解决扩散模型代码问题
- ¥15 工创大赛太阳能电动车项目零基础要学什么
- ¥20 limma多组间分析最终p值只有一个
- ¥15 nopCommerce开发问题
- ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
- ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决