二战后的某一天,N个日本人来到了一个山洞休息,为了派出一
个日本人去外面充满危险的丛林中采摘食物,他们设置如下游戏产生
外出采摘的人:
1、首先,所有参加游戏的日本人按顺序编号为1、2、3…N;
2、接下来每个日本人心里产生一个数字,这个数字称为序号为 N
的人的密码P;
3、所有参加游戏的人按照编号站成一个圈,长老为游戏设置初
始密码K,从编号为1的人开始报数,报到K的人退出队伍,然后将自
己心中的密码P说出来,由下一个人继续从1开始报数,报到P的人退
出队伍,以此类推;
4、当队伍中剩下一个人的时候,这个人就是今天要出去采摘的
日本人,他可能回不来了!
请各位同学设计程序并使用Java语言实现该程序,在用户输入了
人数N、每个人的密码P和初始密码K的情况下,自动完成上面的选择
过程,输出先后离开队伍的人的序号序列,最后输出要去采摘的日本
人,输出他的编号。如采用图形化形式表示整个游戏过程,本次试验
额外加分。
源码:

import java.util.*;
import javax.swing.*;public class live {public static void main(String[] args) {int N = 0,k = 0;Scanner in = new Scanner(System.in);N = Integer.parseInt(JOptionPane.showInputDialog(null, "please input the number of people N:"));k = Integer.parseInt(JOptionPane.showInputDialog(null, "please input the original password k:"));//这里定义了三个链表,一个存放所有的密码,一个存放出列的顺序,一个存放人的下标值LinkedList<Integer> allKeys = new LinkedList<>();LinkedList<Integer> order = new LinkedList<>();LinkedList<Integer> indexList = new LinkedList<>();for(int i = 1;i <= N;i++){allKeys.add(Integer.parseInt(JOptionPane.showInputDialog(null, "please input the " + i + " key")));indexList.add(i);}
//      LinkedList<Integer> allKeysCopy = new LinkedList<>(allKeys);//这里没用clone的原因是LinkedList的clone()方法是浅克隆,在之后的remove会存在问题//       System.out.println(allKeysCopy.toString());
//      System.out.println(indexList.toString());int outN;//考虑出队后从出队的人的下一个人开始数,放大outN的作用域while(N>1){outN=0;outN=(k+outN-1)%N;//计算出队的人在链表中的下标if(outN==0){outN=N;}k = allKeys.get(outN-1);//得到出队人的密码order.add(indexList.get(outN-1));indexList.remove(outN-1);allKeys.remove(outN-1);N--;}
//      System.out.println(allKeys.toString());
//      System.out.println(order.toString());
//      System.out.println(indexList.toString());
//      System.out.println((indexList.indexOf(allKeys.get(0))+1));
//      JOptionPane.showMessageDialog(null,"The last people is num "+(allKeysCopy.indexOf(allKeys.get(0))+1));//LinkedList的下标从0开始JOptionPane.showMessageDialog(null,"The last people is num "+(indexList.getFirst()));JOptionPane.showMessageDialog(null,"The dequeue order is "+order.toString());in.close();}
}

部分解释:
//这里定义了三个链表,一个存放所有的密码,一个存放出列的顺序,一个存放人的下标值

     LinkedList<Integer> order = new LinkedList<>();LinkedList<Integer> indexList = new LinkedList<>();

//通过求模运算计算出出队人的下标,将下标存储在order表中,得到出对人的密码来进行下一轮的出队。

int outN;//考虑出队后从出队的人的下一个人开始数,放大outN的作用域
while(N>1){outN=0;outN=(k+outN-1)%N;//计算出队的人在链表中的下标if(outN==0){outN=N;}k = allKeys.get(outN-1);//得到出队人的密码order.add(indexList.get(outN-1));indexList.remove(outN-1);//在indexList和allKeys中同时删除出队的人,要不然结果会出现重复allKeys.remove(outN-1);N--;}```该实验是一个约瑟夫环问题

野外生存问题处理系统相关推荐

  1. 山体等高线怎么看_地貌图知识(学了军事地图也会看)定向运动及野外生存入门技巧4...

    地图在古代早已显示出它的重要作用了.那么地图在现代战争中的作用又如何呢?现代战争,各军兵种协同作战,战场范围广阔,战争的突然性和破坏性增大,情况复杂多变,组织指挥复杂,对地图的依赖性更大,地图成了军队 ...

  2. 2015年11月27日 野外生存(一)刀

    序,看了贝尔野外求生系列节目很多期,对贝尔的求生技能钦佩不已,也羡慕他可以亲切接触大自然...准备野外生存第一位的应该是拥有一把趁手的兵器-刀,可以砍竹子,劈木头,切割绳子等,因此如何选择一把好刀,是 ...

  3. 219二队老虎全程直击报道野外生存挑战赛

     [原创]219二队老虎全程直击报道野外生存挑战赛 题记:五一生存挑战赛已经结束好几天,直到今天才有时间坐下来好好回想比赛中的每个片段,我决定把这段精彩的时光用文字记录下来,献给我的队友.组委会.驴友 ...

  4. 赶紧学点特种兵野外生存技巧

    特种兵野外生存非常重要,在战斗中一旦与大部队失去联系,或在孤立无援的敌后和生疏的荒野丛林和孤岛上,在仪器断绝的情况下,都需要野外生存本领存续生命.下面就介绍一些简单的野外生存常识. 一.利用自然特征判 ...

  5. tis红石生存服务器后勤系统,我的世界红石生存服务器TIS,真正的大神团队,惊叹世界的杰作...

    在<我的世界>游戏中红石是制作很多机械化道具的重要组成部分,在游戏的众多服务器中,有一个服务器就将红石玩到了极致,它就是红石生存服务器TIS.这个服务器相对于其他的服务器的性质还不同,在外 ...

  6. tis红石生存服务器后勤系统,我的世界红石生存服务器TIS,国内大神团队制作,让全世界震撼...

    原标题:我的世界红石生存服务器TIS,国内大神团队制作,让全世界震撼 在<我的世界>游戏中红石是制作很多机械化道具的重要组成部分,在游戏的众多服务器中,有一个服务器就将红石玩到了极致,它就 ...

  7. 绳结的打法(野外生存学习)

    经常看m vs w的同学们肯定都想学习如何打绳结,虽然bear每集都说了下打法,不过想必或是因为速度过快或是因为讲解比较笼统,大家很难明白打法.这里收集了部分绳结的打法,拿出来与大家分享. 半结 Ov ...

  8. day1 还是day1_庆祝Excel Day 40000

    day1 还是day1 Excel hasn't been around for 40,000 days, but Excel's date system starts at January 1, 1 ...

  9. 居安思危——“非常时期”的城市生存

    Ragnar Benson(美国)  原著 黄药师(加拿大)  编译 第一辑   城市生存的心理准备和基本法则 (编注:刚刚过去的2008年,我国的全体国民在享受着成功举办奥运会的喜悦与荣光的同时,也 ...

最新文章

  1. 由旋转矩阵计算欧拉角的方法
  2. python程序加密_项目源代码被好朋友“盗用”!让我痛心疾首!给Python源码加密!...
  3. weblogic 文件服务器,weblogic配置文件服务器
  4. android swf游戏下载工具,安卓swf游戏播放器下载
  5. react-native学习小结
  6. Java搭建网站相关知识整理(新手上路)
  7. lopatkin俄大神精简中文系统Windows 10 Enterprise 18362.145 19H1 Release x86-x64 ZH-CN BOX
  8. 005 Java反射面试题
  9. 【韦东山嵌入式Linux】Linux命令进阶笔记
  10. [Matlab]绘图颜色
  11. [源码解析] TensorFlow 分布式环境(6) --- Master 动态逻辑
  12. 小米路由器显示无法连接服务器错误代码,小米路由器:路由器无法上网怎么办...
  13. 富文本编辑器ueditor 自定义工具栏配置
  14. C# WPF 3DTools下的TrackballDecorator清除view,出现Null异常
  15. 【7gyy】教你快速对异常错误进行更正
  16. ubuntu平台下编译vlc-android视频播放器实践
  17. SurfaceView和View的区别
  18. 【C++游戏引擎Easy2D】Random随机数,不同于Rand,做游戏必备
  19. 重新整理秋招准备的思路-9.20
  20. 批零兼营、上下游信息不同步,只需要一个功能,就能实现信息共享

热门文章

  1. TMS320F28xx ADC转换图解
  2. 【编程基础】快速了解编程语言
  3. L13-理解Python中的特殊的返回值-函数
  4. 技术面试之反向面试问什么?很多人都不知怎么问。
  5. 2022-2028年全球与中国贴标机(印刷和贴标签及贴标设备)产业市场前瞻与投资战略规划分析
  6. 缺少python解释器_列缺_准确位置_功效_怎么按摩_别有病
  7. 给大家推荐的著名IT网站
  8. 基于javaweb,ssm鲜花销售系统
  9. push_back 和 emplace_back 的差异,清晰易懂!
  10. LeetCode 1144.递减元素使数组呈锯齿状: 贪心