`
JieyiQ2014
  • 浏览: 4316 次
文章分类
社区版块
存档分类
最新评论

约瑟夫环的java实现

阅读更多

 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

 

以下是java的实现方式(基于LinkedList实现):

 

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;

/**
 * 约瑟夫环的实现
 * 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。
 * 从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;
 * 依此规律重复下去,直到圆桌周围的人全部出列。
 */

/**
 *
 */
public class SonotaTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        printArray(getTheNumbers(31, 9, 5));
    }

    /**
     * 约瑟夫环的实现
     * @param personNo 总人数
     * @param num 出列的数字
     * @param startNo 开始号
     * @return 出列号码的出列顺序
     */
    public static String[] getTheNumbers(int personNo, int num, int startNo) {

        ArrayList<String> returnList = new ArrayList<String>(personNo);
        LinkedList<String> personsList = new LinkedList<String>();
        for (int i = 1; i <= personNo; i++) {
            personsList.add(String.valueOf(i));
        }

        Iterator<String> it = personsList.iterator();
        for (int i = 1; i < startNo; i++) {
            it.next();
        }

        int tmpNum = 1;
        while(personsList.size() != 1) {

            if (!it.hasNext()) {
                it = personsList.listIterator();
            }

            String tmpNo = it.next();

            if (tmpNum == num) {
                returnList.add(tmpNo);
                it.remove();
                tmpNum = 1;
                continue;
            }

            tmpNum++;
        }
        returnList.add(personsList.get(0));

        return returnList.toArray(new String[0]);
    }

    public static void printArray(String[] array) {
        for (String ss : array) {
            System.out.print(ss.concat(","));
        }
    }
}

 

 输出结果:

      13,22,31,9,19,29,8,20,1,12,25,6,21,4,18,5,24,11,30,23,15,10,7,14,17,28,26,27,16,2,3

分享到:
评论

相关推荐

    约瑟夫环java实现

    约瑟夫环java实现

    java编写的循环链表来实现约瑟夫环

    循环链表 实现约瑟夫环 java 自己写的 测试通过 有注释

    约瑟夫环问题Java代码实现

    约瑟夫环问题Java代码实现 约瑟夫环问题是一种经典的算法问题,指的是在一个圆形排列的n个人中,每次从1开始报数,凡是报到m的人出局,问最后出局的人是谁。这个问题可以使用Java语言来实现。 约瑟夫环问题的Java...

    yuesefuhuan.rar_约瑟夫环 java

    总结,约瑟夫环问题的Java实现是一个很好的面向对象编程实例,它涉及到了类的设计、对象的创建和操作,以及数据结构(如链表)的应用。通过解决这个问题,程序员可以提升对Java语言的理解,锻炼解决问题的能力,以及...

    JAVA实现约瑟夫环

    用JAVA实现约瑟夫环

    JAVA实现约瑟夫环的方法

    使用JAVA实现约瑟夫环,可以输入任意一组数字

    java用数组实现约瑟夫环

    java用数组实现的约瑟夫环问题。代码简单易懂。

    约瑟夫环设计实现

    约瑟夫环是一种经典的数据结构问题,通过 Java 语言来实现约瑟夫环,可以让我们更好地理解算法和数据结构的思想。下面,我们将对约瑟夫环的设计实现进行详细的介绍。 课程设计介绍 约瑟夫环是一种典型的循环链表...

    java实现约瑟夫环问题Josephus

    java实现约瑟夫环问题Josephus 约瑟夫问题 * 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k(1,2,3...n)的人开始报数,数到m(1,2,3...)的那个人出列; * 他的下一个人又从1开始报数,...

    Java递归实现约瑟夫环应用问题

    约瑟夫环是一个数学的应用问题: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,...

    约瑟夫环,java

    这是一个java的约瑟夫问题代码,实现约瑟夫问题(循环链表)!

    约瑟夫环的单链表实现

    【约瑟夫环的单链表实现】 约瑟夫环问题,又称约瑟夫环序列,是一个著名的理论问题,源自古罗马的一种传说。问题的基本设定是:人们站成一个圈,从某个人开始按顺时针方向报数,每报到特定数值的人会被排除出圈,...

    用Java和Python实现约瑟夫环算法的代码示例.zip

    用Java和Python实现约瑟夫环算法的代码示例.zip 用Java和Python实现约瑟夫环算法的代码示例.zip 用Java和Python实现约瑟夫环算法的代码示例.zip 用Java和Python实现约瑟夫环算法的代码示例.zip 用Java和Python实现...

    求解约瑟夫环 数据结构循环链表 java求解

    约瑟夫环问题,也称为约瑟夫环序列或约瑟夫问题,是一个著名的理论问题,源自古罗马历史上的一个故事。...通过Java实现约瑟夫环,不仅能够锻炼编程能力,还能加深对数据结构和算法设计原理的理解。

    数据结构(Java)约瑟夫环

    在Java中实现约瑟夫环,我们需要用到的数据结构主要是队列或者链表。队列可以模拟人们的排队顺序,而链表则方便我们进行删除操作。下面我们将详细探讨如何利用这些数据结构来解决问题。 首先,我们可以创建一个`...

    java simith数和约瑟夫环问题代码

    Java 实现史密斯数和约瑟夫环问题代码 在本节中,我们将探讨 Java 实现史密斯数和约瑟夫环问题的代码实现。史密斯数和约瑟夫环问题是经典的编程题目,它们都是基础编程概念的延伸。 首先,让我们来了解一下约瑟夫...

    约瑟夫环的实现

    在"JosephRing"这个压缩包文件中,可能包含了约瑟夫环问题的代码实现,例如用不同的编程语言编写的示例程序,或者对算法进行优化的版本。通过查看这些代码,可以更深入地理解约瑟夫环问题的实现细节和各种策略,同时...

    利用java写的约瑟夫环

    以下是一个可能的Java实现: ```java public class JosephusProblem { private class Node { int data; Node next; public Node(int data) { this.data = data; this.next = null; } } public int solve...

    (完整word版)约瑟夫环Java课程设计大作业.doc

    4. 功能描述:该问题需要使用 Java 语言实现约瑟夫环问题的解决方案,包括数据结构的设计和算法的实现。 5. 测试数据:该问题需要使用测试数据来验证解决方案的正确性。 二、概要设计 约瑟夫环问题的概要设计可以...

Global site tag (gtag.js) - Google Analytics