Java约瑟夫问题

12345678910111213141516171819202122232425262728293031323334353637383940414243
package josephus;

import java.io.IOException;import java.util.ArrayList;

/** * Created by piqiu on 1/19/16. * Flavius Josephus是公元一世纪的一个犹太历史学家.传说他是罗马人俘获的41个犹太反叛者之一, * 罗马人决定杀害他们,而不是劝其投降.他们决定让这些犹太人站成一个圆圈,并且每隔3个人就杀害1人, * 直到杀光所有的人.Josephus并不相死,于是他计算了一下自己需要站的位置,以使他成为最后一个活下来 * 的人,从而免于一死.这样就产生了一类称作Josephus的问题.这些问题表述为:在链表中的事件不是依次 * 取走,而是每次循环地取走第i个元素,直至取走所有事件的情况下,找出事件的顺序. */public class Josephus {

public static void main(String[] args) throws IOException {        // 总人数        int num = 10;        // 每次删后面的第几个        int step = 3;        // 删除的下标索引        int index = step - 1;        // 被删除的数据        Object removeData;

// 填充数据到ArrayList        ArrayList list = new ArrayList();        for (int i = 1; i <= 10; i++) {            list.add(new Integer(i));        }        System.out.println("The order is: ");

// 循环删除        while (!(list.isEmpty())) {            removeData = list.remove(index);            num = num - 1;            if (num > 0)                index = (index + step -1) % num;            System.out.println(removeData);        }

}}
时间: 2024-10-31 11:41:23

Java约瑟夫问题的相关文章

Java解决约瑟夫问题代码实例_java

复制代码 代码如下: package list; import java.util.ArrayList; /** * Java约瑟夫问题: n个人(不同id)围成一个圈,从startId(任意数)个开始报数m(任意数)个数,数m的人出列排成新队列,m清零, * 然后又从下一个人开始数m个数开始,数到m就出列接在新队列尾部,如此重复,知道所有人都出列为止. * 打印 出列后的新队列 * * eg * int n = 10;//总人数 * int m = 3;   //报数个数 * int star

约瑟夫环的问题

题目描述: 每年六一儿童节,JOBDU都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为JOBDU的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随机指定一个数m,让编号为1的小朋友开始报数.每次喊到m的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续1...m报数....这样下去....直到剩下最后一个小朋友,可以不用表演,并且拿到JOBDU名贵的"名侦探柯南"典藏版

编程-约瑟夫环问题用java怎么解决,有简单点的方法吗

问题描述 约瑟夫环问题用java怎么解决,有简单点的方法吗 一组人(n)个,围成一圈,从某人开始数到滴三个的人出列,在接着从下一个人开始数,最终输出最终出列的人(约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3,...,n)分别表示)围坐在一张圆桌周围.从编号k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,知道圆桌周围的人全都出列. 解决方案 import java.util.Scanner; public class count

约瑟夫java设计大作业

问题描述 约瑟夫java设计大作业 这是17世纪的法国数学家加斯帕在<数目的游戏问题>中讲的一个故事:15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人 就将他扔入大海,如此循环进行到仅余15个人为止.问怎样排 法,才能 的使每次投入大海的都是非教徒 的设计思想,java设计大作业 解决方案 //a代表教徒,b代表非教徒 public class Test { /** * Enter

Java采用循环链表结构求解约瑟夫问题_java

本文实例讲述了Java采用循环链表结构求解约瑟夫问题的方法.分享给大家供大家参考.具体分析如下: 这是第一次java考试的试题,对于没看过链表的同学来说就不会做,现在回头看看,还真不难. 约瑟夫问题:有n个人,其编号分别为1,2,3,-,n.这n个人按顺序排成一个圈.现在给定s和d,从第s个人开始从1依次报数,数到d的人出列,然后又从下一个人开始又从1开始依次报数,数到d的人又出列,如此循环,直到最后所有人出列为止.要求定义一个节点类,采用循环链表结构求解约瑟夫问题. 以下java版的答案: 复

java 实现约瑟夫环的实例代码_java

复制代码 代码如下: import java.io.BufferedInputStream;import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Josephus {    private static class Node{        int No;        Node next;        public Node(int No){            this

Java单循环链表解约瑟夫问题

问题描述 约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列.packagecom.tly.java;/****单向循环列表*/publicclassCircleLinkedList<E>{privateNode<E>head;privateintsize;//thelengthofthelistpublicCircleL

关于约瑟夫问题,搞不懂思路,不会编程

问题描述 关于约瑟夫问题,搞不懂思路,不会编程 有10个人围成一个圈(编号0-9),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,直到最后只剩一个人为止,问此人原来的位置是多少号?(编程实现)速求 解决方案 要用java编程,C我都没学过... 解决方案二: /** * Title: 编号1-10的人坐在一起围成一个圈 可以数数从1开始数 数3出列 下个人继续开始从1开始数 * Description: 打印最后一名出列是几号 * @author Mr Lv * @date

think in java interview-高级开发人员面试宝典(九)

模拟面试 今天来谈一下出于面试官的角度,他是会如何去考虑给一个侯选人面试的. 下面先来看一份简历的摘要. 熟练掌握SPRING, STRUTS1, 2, HIBERNATE: J2EE方面5年工作经验: ORACLE使用经验48个月: 熟练掌握JAVA缓存机制: 了解工作流.ERP.EAI工作机制并有实际项目经验: 老实说,一般面试官看到上面的简历就会想让这个人来面试了,因为真的你SSH,ORACLE,ERP或者是EAI等工作过5年很利害了已经,于是面试官在F2F(Face To Face)面试