风也温柔

计算机科学知识库

java用链表实现约瑟夫环算法 约瑟夫环算法的几种实现方式,最简单方式,一行代码实现

  约瑟夫环算法的几种实现方式,最简单方式,一行代码实现

  时间:2019-09-12

  本文章向大家介绍约瑟夫环算法的几种实现方式,最简单方式,一行代码实现,主要包括约瑟夫环算法的几种实现方式,最简单方式,一行代码实现使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

  简介:

  约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。

  分析:

  (1)由于对于每个人只有死和活两种状态,因此可以用布尔型数组标记每个人的状态,可用true表示死,false表示活。

  (2)开始时每个人都是活的,所以数组初值全部赋为false。

  (3)模拟杀人过程java用链表实现约瑟夫环算法java用链表实现约瑟夫环算法,直到所有人都被杀死为止。

  1.使用链表循环遍历的形式

  n代表多少个人,m代表编号为M的人:

  <pre> public int josephRing1(int n, int m) {

    LinkedList list = new LinkedList();
    for (int i = 0; i < n; i++) {
        list.add(i);
    }

<p>

    int bt = 0;
    while (list.size() > 1) {
        //// 删除为m-1的人(从0开始)
        //解析看前面
        bt = (bt + m - 1) % list.size();
        list.remove(bt);
    }

  

    return list.size() == 1 ? list.get(0) : -1;
}</pre></p>

  2.使用递推公式

  n代表多少个人,m代表编号为M的人:

  <pre>public int josephRing2(int n, int m) {

    if (m < 1 || n < 1)
        return -1;

<p>

    int last = 0;
    // i代表有目前有几个人
    for (int i = 2; i