美文网首页
约瑟夫问题的一个简单java实现

约瑟夫问题的一个简单java实现

作者: GalileoGalilei | 来源:发表于2018-03-06 17:38 被阅读0次

约瑟夫问题(有时也称为约瑟夫斯置换),是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。

有n个囚犯站成一个圆圈,准备处决。首先从一个人开始,越过 k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过 k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。

问题是,给定了n和k,一开始要站在什么地方才能避免被处决?

这里不研究数学解法,用java模拟整个过程。

通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解,而ArrayList下标正好从0开始,代码如下:

public static void main(String[] args) {
    joseph(4, 2, 1);
}

/**
 * @param total 总人数
 * @param count 数到几出列
 * @param start 从谁开始
 */
public static void joseph(int total, int count, int start){
    
    ArrayList<String> list = new ArrayList<String>();
    for (int i = 1; i <= total; i++) {
        list.add("person-"+i);
    }
    
    int startIndex = start - 1;
    int countActual = count - 1;
    while(list.size() > 0) {
        startIndex = (startIndex + countActual) % list.size();
        
        System.out.println(list);
        System.out.println(list.get(startIndex));
        list.remove(startIndex);
    }
}

结果如下:


joseph.png

相关文章

  • 约瑟夫问题的一个简单java实现

    约瑟夫问题(有时也称为约瑟夫斯置换),是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约...

  • java算法实现之约瑟夫问题(Josephu)

    首先这个问题我们可以很清楚的看出来,可以使用单向环形队列的数据结构来代入这个问题。我先来分析一下这道题的思路:第一...

  • [java]约瑟夫环问题

    约瑟夫环问题:一圈共有N个人,开始报数,报到M的人自杀,然后重新开始报数,问最后自杀的人是谁?

  • 约瑟夫问题 -- python实现

    问题描述 N个人围成一个圈, 从第一个人开始报数, 报到M的人出圈, 剩下的人继续从1开始报数, 报到M的人出圈;...

  • 队列实现约瑟夫问题

    约瑟夫问题传说犹太人反叛罗马人,落到困境,约瑟夫和39 人决定殉难,坐成一圈儿,报数1~7,报到7的 人由旁边杀死...

  • 约瑟夫环问题

    约瑟夫环问题约瑟夫环描述:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围...

  • [数据结构]约瑟夫问题 解题报告

    Problem Description (本题要求用循环链表实现) 约瑟夫问题是一个经典的问题。已知n个人(不妨分...

  • 2019-05-05 约瑟夫问题STL vector解法

    利用STL 标准模板库中的vector或者list实现约瑟夫问题

  • 2018-04-11

    java实现简单的缓存 下面代码展示用java实现一个简单缓存: 上面代码中,CacheImmutable类直接调...

  • php实现约瑟夫环问题

    题目:一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数, ...

网友评论

      本文标题:约瑟夫问题的一个简单java实现

      本文链接:https://www.haomeiwen.com/subject/cesrfftx.html