如果没有对约瑟夫环有太大的印象,那么应该对丢花娟这个游戏有所印象吧,但这个游戏与单纯的丢花娟规则不一样,规则如下:
1、一群人围成一个圈
2、指定一个人执行丢花娟的任务
3、只能越过固定的人数(丢花娟是想丢哪就丢哪),自己也算其中一个人数
4、被丢到的人直接被淘汰,由他下一个人执行丢花娟任务,直到只剩下最后一个人

这个过程可以使用环形表的方式去解决,每一个人代表链表中的一个节点,废话不多说,直接上代码:

public class JosephRing {/*1、生成多个链表节点组合成环形链表表示环2、输入开始位置,每个位置跳跃多少个节点(自己也算跳跃的节点)3、淘汰最终到达的节点4、从下一个节点开始,进行重复跳跃5、输出淘汰的过程和最后留下的节点序号*/public static void main(String[] args) {JosephRing josephRing = new JosephRing();//以六个节点,每次跳跃5为例josephRing.showJosephRing(1,5,josephRing.creatSingleLink(6));}//创建环形链表public SingleLink creatSingleLink(int num){SingleLink first = new SingleLink(-1);SingleLink curNode = null;for (int i = 1; i <= num; i++){SingleLink nextNode = new SingleLink(i);if (i == 1){first = nextNode;curNode = nextNode;}curNode.setNext(nextNode);curNode = nextNode;}curNode.setNext(first);return first;}//执行约瑟夫环public void showJosephRing(int start, int jumpNum, SingleLink first){SingleLink helper = null;SingleLink curNode = first;while (true){if (curNode.getNext().getNo() == start){helper = curNode;break;}curNode = curNode.getNext();}while (true){if (helper.getNext() == helper){break;}for (int i=1; i<=jumpNum-1; i++){helper = helper.getNext();}System.out.println("淘汰:"+helper.getNext().getNo());helper.setNext(helper.getNext().getNext());}System.out.println("最终留下"+helper.getNo());}
}

运行结果:

淘汰:5
淘汰:4
淘汰:6
淘汰:2
淘汰:3
最终留下1

我写的代码并不完善,比如很多会报错的地方都没有进行处理,也不是执行最快的,但是这是我在学习过程中的一种学习记录,能把自己所学的写出来才能说明自己掌握了,我还会分享更多自己学习到的东西,希望大家能多多指出我的错误。

丢花娟(约瑟夫环问题)相关推荐

  1. 数据结构与算法--我们来玩丢手绢(约瑟夫环问题)

    我们来玩丢手绢 昨天我们打扑克,今天我们丢手绢 丢手绢我们都知道这个游戏,他的由来由约瑟夫 (Josephus)提出来的 据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,3 ...

  2. 丢手绢 【约瑟夫环】

    六一儿童节到了,小朋友们在玩丢手绢的游戏.总共有C个小朋友,编号从1到C,他们站成一个圈,第i(1<i<=C)个人的左边是i-1,第1个人的左边是C.第i(1<=i<C)个人的 ...

  3. C++约瑟夫环(又称丢手绢)解决---最简单的理解

    首先约瑟夫环的定义: 在一间房间总共有n个人(下标0-n-1),只能有最后一个人活命. 按照如下规则去排除人: 所有人围成一圈, 从0开始 顺时针报数, 每次报到m的人将被排除掉 被排除掉的人将从房间 ...

  4. 约瑟夫环 -- 丢手绢问题

    问题描述 约瑟夫环问题,也称为"丢手绢问题". 编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3-这样依次报),数到 m 的 士兵 ...

  5. Algorithm One Day One -- 约瑟夫环(丢手绢问题)

    算法是编程的灵魂,是编程思想的精髓----Algorithm One Day One /******************************************************** ...

  6. 一文读懂约瑟夫环算法

    2020-05-25 20:13:40 作者 | 扬帆向海 责编 | 王晓曼 出品 | CSDN博客 问题描述 约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题.在计算机编程的 ...

  7. 【51nod - 1875】 丢手绢(约瑟夫问题,可打表,用STL模拟)

    题干: 六一儿童节到了,小朋友们在玩丢手绢的游戏.总共有C个小朋友,编号从1到C,他们站成一个圈,第i(1<i<=C)个人的左边是i-1,第1个人的左边是C.第i(1<=i<C ...

  8. 一文读懂约瑟夫环算法 | 原力计划

    作者 | 扬帆向海 责编 | 王晓曼 出品 | CSDN博客 问题描述 约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为约瑟夫环.又称&q ...

  9. C语言解决经典问题约瑟夫环--数组

    什么时约瑟夫环问题? 约瑟夫问题,是一个计算机科学和数学中的问题,在计算机编程的算法中,类似问题又称为约瑟夫环,又称"丢手绢问题". 问题的大致内容就是:一共有N个人,从1开始报数 ...

  10. 毕业生求职必会算法 约瑟夫环问题

    写在前面: 我是 「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感 ...

最新文章

  1. python使用localhost链接mysql出错及解决办法
  2. s:action,s:param的用法
  3. 在C#中使用 CancellationToken 处理异步任务
  4. Java多线程系列(十):源码剖析AQS的实现原理
  5. 语音合成技术与资源 - 资源篇
  6. Android的手机震动
  7. python split()方法_聊聊 Python 的单元测试框架(一):unittest
  8. Tensorflow——add_layer(添加神经层)
  9. 网络拓扑图(附华为、CiscoVisio图标)
  10. pr 文件结构不一致_只要你用过PR,就一定会遇到这些的问题(下)
  11. powerbi导入地图_PowerBI 地图 - 层级下钻形状地图最佳实践
  12. 厦门大学计算机保研学校,厦门大学计算机科学系(专业学位)计算机技术保研
  13. 【Python教程】十八、这根本就不是我的错嘛~Python的异常处理
  14. 咸达医药数据库--介绍
  15. php实现远程下载文件到本地服务器指定目录
  16. 逻辑代数:逻辑运算与定理,代数化简
  17. 贵阳CBD造型怪异 或扭曲或变形
  18. 【SQL】:保留小数点后几位(除法)
  19. 2022-2028全球全氟己基甲醚行业调研及趋势分析报告
  20. java excel异步导出_Java导出Excel

热门文章

  1. ARM920T中断体系结构
  2. 联想Win10安装Ubuntu双系统教程
  3. 从入门到变现|全面解析视频号运营规则,看完少走3天弯路!
  4. JavaScript的发展史
  5. display:HDCP协议简述
  6. 《界面风格设计说明书》
  7. mysql创建唯一非聚集索引_创建聚集索引、非聚集索引、唯一索引、唯一键约束...
  8. 计算机网络选择公用还是家庭,如何设置打印机共享?
  9. 基于卷积神经网络的自然场景作物害虫识别
  10. 网络流量分类方法调研