问题描述:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。

解题思路:因为是围成一圈,所以用循环链表是最符合相关思维的(不是最优解),对于第M个人进行出队,然后前后节点连接起来继续形成闭环(新约瑟夫环)

代码(Java版)

import java.util.Scanner;/*** @author : jeasion* @name* @comment* @return*/
public class practice37 {public static void main(String[] args) {int N = 0;int M = 0;Scanner s = new Scanner(System.in);System.out.print("N:");N = s.nextInt();System.out.print("M:");M = s.nextInt();Josephus josephus = new Josephus();josephus.dead(M, N);}}class Josephus {int person;Josephus next;Josephus pointer;//用于出队第M人public void dead(int m, int n) {int M = m;int N = n;Josephus josephus = new Josephus();pointer = josephus;//构建循环链表for (int i = 0; i < N; i++) {josephus.person = i;josephus.next = new Josephus();josephus = josephus.next;}josephus = pointer;while (josephus.next.next != null) {josephus = josephus.next;}josephus.next = pointer;int count = m - 1;System.out.print("死亡名单:");while(!pointer.next.equals(pointer)) {count--;Josephus before = pointer; //记录出队前的人,便于以后使其指向M+1的人pointer = pointer.next;if (count == 0) {System.out.print(pointer.person + "  ");before.next = pointer.next;pointer.next = null;                                                               pointer = before.next;count = m - 1;}}System.out.println("\n幸存者:"+pointer.person);}}

Java 约瑟夫环(循环链表解决)相关推荐

  1. java约瑟夫环 循环链表_约瑟夫环_循环链表JAVA解答

    编写测试案例 public class Cicle { @Test public void test() { LinkedList linkedList = new LinkedList(); lin ...

  2. java约瑟夫环迭代器_Josephus约瑟夫环问题的不同实现方法与总结

    /************************************************************************/ /*                  Josep ...

  3. 烽火算法题 报数问题(不是约瑟夫环)双向链表 Java实现与C实现

    报数问题 报数问题 解答 1.题目要求 2.解题思路 3.代码实现 3.1 java版本 3.2 c版本 4.问题总结 报数问题 时间限制:3000MS 内存限制:589824KB 题目描述: 当n个 ...

  4. 用java解决约瑟夫循环问题,Java实现循环列表解决约瑟夫环问题

    约瑟夫环:共有n个人围成一圈,从1开始报数,数到m的人出圈,求最后幸运者序号?? 下面用Java实现循环列表解决这个问题: package com.iteye.ljmdbc7a; import jav ...

  5. java实现环形链表解决约瑟夫环问题

    什么是环形链表? 环形链表就是单向链表的基础上让链表的首尾相连,形成一个环,这就是一个循环链表. 什么是约瑟夫环问题? 约瑟夫环如下: 约瑟夫问题是个著名的问题:N个人围成一圈,第一个人从1开始报数, ...

  6. 循环链表解决约瑟夫环问题

    约瑟夫环问题可以简单的使用数组的方式实现,但是现在我使用循环链表的方法来实现,因为上午看到一道面试题规定使用循环链表解决约瑟夫环问题. 什么是约瑟夫环? "约瑟夫环是一个数学的应用问题:已知 ...

  7. 循环链表构建及解决约瑟夫环、逢七过、链表逆置问题

    文章目录 循环链表构建 测试 约瑟夫环 逢七过 链表逆置 循环链表构建 循环链表与链表区别就在于尾指针不再指向null而是指向头指针,形成环. 接口定义: package p1.接口;import j ...

  8. 【Java】单循环链表解决约瑟夫环问题

    问题描述 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自 ...

  9. 【C语言】循环链表解决约瑟夫环问题

    好玩的约瑟夫环:有M个人,编号分别为1到M,玩约瑟夫环游戏,最初时按编号顺序排成队列:每遍游戏开始时,有一个正整数报数密码N,队列中人依次围坐成一圈,从队首的人开始报数,报到N的人出列,然后再从出列的 ...

最新文章

  1. java设计模式---原型模式
  2. tensorflow随笔-collection收集器
  3. java模糊查询比对方法_Java多条件和模糊查询
  4. msyql 禁止远程访问
  5. 《Excel 职场手册:260招菜鸟变达人》一第 26 招 对齐两个字的名字
  6. Linux常用知识与命令
  7. java mp4转码 h264_10分钟学会Jave视频转码avi--gt;mp4(h264编码格式)!_Java_七九推...
  8. DreamWeaver插件–Javascript文件美化、自动缩进
  9. fckeditor java 使用方法_FCKeditor使用说明
  10. 如何给 PDF 文档批量添加页眉页脚?如何给 PDF 文档批量添加页码?
  11. Ubuntu 18.04 隐藏桌面的回收站图标
  12. ACM-ICPC2018北京网络赛 Tomb Raider(暴力)
  13. 24位真彩色图片取摸方法(用于WS2812显示)
  14. 解决Mac没有consolas字体的问题,idea也能用
  15. Android加密工具类,Android AES加密工具类分享
  16. 【爬虫】用Python爬取去哪儿网热门旅游信息(并打包成旅游信息查询小工具)
  17. 文献翻译2:AOPG: Anchor-free Oriented Proposal Generator for Object Detection
  18. python可以自学吗需要什么基础-自学python需要什么基础,要掌握哪些知识?
  19. 小六六平时的开发小技巧二(Nacos在服务配置中心的妙用)
  20. js 给元素添加自定义属性

热门文章

  1. git-基本操作的小结
  2. django-聚合函数
  3. js中的字符长度问题
  4. CF666B. World Tour
  5. Linux 中显示所有正在运行的进程
  6. 安装Vistual Studio 2005的小问题
  7. 文档预览 OfficeWebViewer:在浏览器中查看Office文档
  8. Nginx的11个phases
  9. 行为设计模式 - 模板方法设计模式
  10. STP端口状态特点、STP端口角色特点、链路状态发生变化,STP如何重新收敛? TCN何时发?uplinkfast技术、Portfast技术、backbonefast技术、常见的STP调整命令: