约瑟夫问题的java实现】的更多相关文章

关于单向循环链表的约瑟夫问题(Java实现) 最近在学习链表时,遇到单向循环链表中的约瑟夫问题.在构建循环链表的代码上,我有一点很不理解,遂记录下来. Josephu问题为: 设编号为1, 2,.. n的n个人围坐- -圈,约定编号为k (1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一-位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列. 提示:用一个不带头结点的循环链表来处理Josephu问题:先构成一个有n个结点的单循环链表,然…
方法一.自定义的链表实现 package com.code.yuesefu; public class YueSeFuList { public static void main(String[] args) { ;//申请一个指定长度的链表 Node n = YueSeFuList.createNodes(count); ;i<count;i++){ Node second = n.next;//第2个 n = n.next.next;//第3个 System.out.println(n.it…
总共3中解决方法,1.数学推导,2.使用ArrayList递归解决,3.使用首位相连的LinkedList解决 import java.util.ArrayList; /** * 约瑟夫环问题 * 需求:n个人围成一圈,从第一个人开始报数,数到K的人出局,然后从下一个人接着报数,直到最后一个人,求最后一个人的编号 * @author Miao * */public class Josephus { public static void main(String[] args) { int n =…
约瑟夫环 的 面向对象 解法 罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止.然而Josephus和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏. 如有疑问请参考:http://blog.fishc.com…
约瑟夫环问题说的是,n个人围成一圈,从第k个人开始沿着一个方向报数,报到第m个人时,第m个人出列,从紧挨着的下一个人(未出列)开始,求整个环中人的出列顺序.下面是我用java实现的解决方法. class JosephLoop { //n为环中人数,m为每次报数的人数,k为报数的起始位置0~n-1 int n,m,k; int[] persons; int[] seq; JosephLoop(int n, int k, int m){ this.n = n; this.m = m; this.k…
转自:http://www.cnblogs.com/timeng/p/3335162.html 约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列. 直接给出代码,欢迎拍砖. 1 package com.timeng; 2 3 import java.util.ArrayList; 4 import java.util.List; 5…
约瑟夫问题,又称丢手帕问题.试着实现了一下,实现逻辑简单,没有复杂的算法,适合新手参考. //参数step指步进值,步进到几则出列 //参数count指共有几个人 public static int diuShouPa(int step, int count) { //用List模拟一个队列 List<Integer> queue = new ArrayList<Integer>(); for (int i = 1; i <= count; i++) { queue.add(…
/* * 作者:zhaop * 功能:约瑟夫环 * */ public class Joseph { public static void main(String[] args) { // TODO Auto-generated method stub CyLink link = new CyLink(); link.setLen(5); link.setK(2); link.setM(2); link.createLink(); link.show(); link.play(); } } cl…
10个人围成一圈,从1到10编号,从1开始数,数到3或3的倍数的位置,则该位置的人出局,求最后剩下哪一个号? 数组解法: 数组存放数组:a[10]存在1到10编号人 数组遍历到尾部又从头遍历:遍历数组--->内循环.设置一个外循环--->使得数组可以从头遍历,而且从1开始的的递增数字.while循环实现 数到3或3的倍数的位置出局:a[i]=0; 退出外部循环的条件:只剩下一人. 具体代码如下: package algorithm.约瑟夫斯; public class 数组解法 { publi…
问题: 丢手帕游戏是约瑟夫问题的一个变种,游戏很简单,N个小孩围成一个圈,标号为1到N,从编号为m的小孩开始报数,报到第L个小孩退出游戏,然后下一个小孩继续从1开始报数,数到第L个小孩退出游戏,如此循环,直到剩下最后一个小孩是胜利者. 使用环形链表方式解决问题: 代码如下: /** * 描述: * @作者:niexiaohui * @创建时间:2016年12月27日 * @修改记录: */ public class Test { public static void main(String[]…