介绍:
有一天罗马人占领了犹太人的领地,39个犹太人与约瑟夫以及他的朋友躲
到一个山洞中,39个犹太人决定宁愿死也不要被罗马人招降,于是它们决定了一个自杀方式,41个人排成一个圆圈,第一个人从1开始报数,依次往后,如果有人报到3,那么这个人就必须自杀,然后由他的下一个人重新从1开始报数,直到所有人都自杀身亡。然而约瑟夫和他的朋友并不想遵从,于是约瑟夫要他的朋友先假装遵从,他将朋友与自己安排在第16与第31个位置,从而逃过 了这场死亡游戏。

问题转换: 41个人围坐一圈,第一个人编号为1,第二个人编号为2…第n个人编号为n

1.编号为1的人开始从1报数,报数为3的那个人退出圈

2.自退出的那个人开始的下一个人再次从1开始报数,以此类推

3.求出最后退出圈的那个人的编号

解题思路:

1.构建含有41个结点的单向循环链表,分别存储1-41的值,分别代表这41个人

2.使用计数器count,记录当前报数的值

3.遍历链表,每循环一次count++

4.假如count==3,则删除当前结点,并打印删除的结点的值,并把count重置为0

重点:用pre和before指针指向了当前结点下一个结点的上一个结点,方便做连接和删除操作

代码:

public class JosephTest {public static void main(String[] args) {Node first=null;Node pre=null;//1.创建循环链表for (int i = 1; i <=41 ; i++) {//创建第一个结点if (i==1){first = new Node(i, null);//将当前结点变成下一个结点的上一个结点pre=first;continue;}//创建中间结点Node newNode = new Node(i, null);//建立连接pre.next=newNode;//将当前结点变成下一个结点的上一个结点pre=newNode;if (i==41){//建立循环pre.next=first;}}//2.创建计数器,记录报数结果int count=0;//记录每次遍历拿到的结点,默认从首结点开始Node n=first;//记录当前结点的上一个结点,默认从首结点的上一个结点开始nullNode before=null;//3.遍历循环链表while(n!=n.next) {//计数器累加count++;if (count == 3) {// 如果计数到3,删除当前结点,并重置count=0before.next = n.next;count=0;//打印被删除的结点System.out.print(n.item + ",");n = n.next;} else {//将当前结点变成下一个结点的上一个结点before=n;//如果没有计数到3,则往下移动一位n = n.next;}}//打印出剩余到最后的那个人System.out.println(n.item);}
//内部结点类private static class Node<T>{T item;Node next;public Node(T item, Node next) {this.item = item;this.next = next;}}
}

【java版数据结构】死亡游戏约瑟夫避免自杀问题相关推荐

  1. 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

  2. Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除(CRUD)

    Java版数据结构之单向链表 CRUD Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除; 留了一个疑问; 我的代码仓库:https://github.com/zhuangbinan ...

  3. Java版数据结构之单向链表

    Java版数据结构之单向链表 我的代码仓库:https://github.com/zhuangbinan/datastructure package club.zhuangbinan.linkedli ...

  4. Java版数据结构之数组模拟环形队列demo

    Java版数据结构之数组模拟环形队列demo 我的代码仓库:https://github.com/zhuangbinan/datastructure 类 CircleArray package clu ...

  5. Java版数据结构与算法——线性表

    *************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如 ...

  6. Java版数据结构与算法笔记

    文章目录 一.数据结构与算法概述及题目 1.数据结构和算法的关系 2.线性结构与非线性结构 Ⅰ-线性结构 Ⅱ-非线性结构 3.经典面试题 Ⅰ-字符串匹配问题: Ⅱ-汉诺塔游戏 Ⅲ-八皇后问题: Ⅳ-马 ...

  7. java版数据结构解迷宫问题_C语言数据结构之迷宫问题

    本文实例为大家分享了数据结构c语言版迷宫问题栈实现的具体代码,供大家参考,具体内容如下 程序主要参考自严蔚敏老师的数据结构c语言版,在书中程序的大体框架下进行了完善.关于迷宫问题的思路可查阅原书. # ...

  8. 学生信息管理系统实习报告(java版数据结构)

    一. 问题分析 1.1 什么是学生信息管理系统以及研究意义 学生信息管理系统是校园网络中一个重要的应用系统,它大大改善了学校教学.科研与管理的基础环境,在一定程度上反映出学校管理现代化的水平.信息管理 ...

  9. 【java版数据结构】看完数据结构的顺序结构后,紧接着去实现ArrayList的底层(150行代码,数组扩容,增删改查,但未实现迭代器)

    实现效果: 需求分析: 可以看到ArrayList容器有很多功能,在指定位置添加元素,在容器末尾添加元素,获取指定位置的元素,获取容器的大小,清空容器的元素,判断容器是否是空的,删除指定位置的元素,删 ...

最新文章

  1. J-LINK不能烧写(错误:JLink Warning: RESET (pin 15) high, but should be low. Please check target)
  2. 【最优解】Leecode 594. 最长和谐子序列——Leecode每日一题系列
  3. aix 安装oracle9,IBM P570 小型机AIX5.3系统安装ORACLE9i
  4. 指尖初体验之主屏幕操作
  5. django orm_Django ORM简介
  6. 蓝桥杯51单片机之利用中断实现倒计数与停表【单片机开发初学者掌握案例】
  7. Java逆向工程SpringBoot + Mybatis Generator + MySQL
  8. Vue同级组件数据传递
  9. 以$开头的shell脚本的变量
  10. Java 类加载器揭秘
  11. 运维面试官喜欢问的问题
  12. Gartner:细分分析如何提高销售预测的准确性?
  13. 基于开源软件构建高性能集群NAS系统
  14. 文件在服务器中存储,如何发送音频文件在服务器中存储
  15. matlab bar3 颜色,matlab中怎么控制柱状图标注的颜色?
  16. 十六进制数高位和低位的结合与分离
  17. vi和vt的区别小窍门_十大vi技巧和窍门
  18. proteus学习笔记一:点亮LED
  19. 利用OGR处理几何要素
  20. Python模拟登录某橙色软件并获取所有订单,康康买了啥奇奇怪怪的东西?

热门文章

  1. 史上最清晰的Java内存模型介绍
  2. 计算机网络:自顶向下 第一章1.6 网络安全
  3. 手机网游开发基础知识之Wap协议
  4. 【第一篇】Mysql数据库详解【重点】
  5. 修复被破坏了的linux文件系统分区表
  6. 提高计算机性能的主流方法,提高电脑内存性能的方法
  7. echarts 饼状图 java_SpringBoot+Echarts实现请求后台数据显示饼状图
  8. JavaScript:数组大全
  9. 物理学四大神兽--薛定谔的猫
  10. CCS v5中烧写Flash实录:成功+失败