约瑟夫环简介,问题以及java实现】的更多相关文章

问题:一群猴子排成一圈,按1,2,--.,n依次编号.然后从第一只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,再把它踢出去-------.,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王.要求:输入m,n,输出最后的那个大王的编号. 很明显,这是一个约瑟夫环的问题,它的特征如下: 1.一群人围在一起坐成环状(例如N个人) 2.从某个编号开始报数(如:K) 3.数到某个数(如:M)的时候,此人出列,下一个人重新报数 4.一直循环,直到所有人出列[3] ,约瑟…
1 什么是约瑟夫环问题? 约瑟夫,是一个古犹太人,曾经在一次罗马叛乱中担任将军,后来战败,他和朋友及另外39个人躲在一口井里,但还是被发现了.罗马人表示只要投降就不死,约瑟夫想投降,可是其他人坚决不同意.怎么办呢,他想到一个主意:让41个人围成一个圆圈,从第一个人开始报数,数到3的那个人被旁边的人杀死.这样就可以避免自杀了,因为犹太人的信仰是禁止自杀的.结果一群人杀来杀去最后只剩下两个了,就是约瑟夫和他朋友,于是两人愉快地去投降了. 约瑟夫和朋友站在什么位置才保住了性命呢,这就是我们今天要讲的约…
总共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 =…
package day_2; import java.util.Scanner; /** * @author Administrator * 约瑟夫环问题: 设编号为 1,2,3,....n的N个人围坐一圈,约定编号为k(1<=k<=n) * 的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次 * 类推,直到所有人出列为止,由此产生一个出队编号的序列. * 方法一:数组取模法.(模拟) */ public class Demo_1 { public st…
import java.util.Scanner; /** * 循环列表的Java实现,解决约瑟夫环问题 * * @author LIU * */ public class LinkedList { // 定义结点,必须是static static class Node { int data; Node next; Node(int arg1) { this.data = arg1; } } public static void main(String[] args) { int n = 0,…
约瑟夫环 的 面向对象 解法 罗马人占领乔塔帕特后,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…
我们首先来看一下约瑟夫环问题: 给定m个人,m个人围成一圈,在给定一个数n,从m个人中的第一个人每第n个人便将其除去,求被最后一个出去的人的编号. 思路: 建立一个长度为m+1的数组,将其的内容初始化为0至m 我们设置变量i与j,i代表数组元素的下表,因为我设置的数组长度为m+1,所以数组下标就为每个人的编号,当i==m的时候,我们将i置为0,让其从头开始便利. 变量j为判断当前元素是否为排列的第n个元素,如果是则将当前下标为i的元素的值置为0,不是的话,i++,j++,每当我们遍历到数值为0的…
问题: N个人从1到N编号.围城一圈,从1開始报数, 数到X时,将X的编号输出,并将那个人踢出, 下一个从1再開始报数,直到全部人都出去 思路: 就是计数.移除,没有太深的思想,直接上代码: package test; import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * N个人从1到N编号,围城一圈, * 从1開始报数, 数到X时,将X的编号输出,并将那个人踢出, * 下一个从1再開…
约瑟夫环问题起源于一个犹太故事.约瑟夫环问题的大意如下: 罗马人攻占了桥塔帕特,41个人藏在一个山洞中躲过了这场浩劫.这41个人中,包括历史学家Josephus(约瑟夫)和他的一个朋友.剩余的39个人为了表示不向罗马人屈服,决定集体自杀.大家制定了一个自杀方案,所有这41个人围成一个圆圈,由第一个人开始顺时针报数,每报数为3的人就立刻自杀,然后再由下一个人重新开始报数,仍然是每报数为3的人就立刻自杀-,直到所有的人都自杀身亡为止. 约瑟夫和他的朋友并不想自杀,于是约瑟夫想到了一个计策,他们两个同…