zoukankan      html  css  js  c++  java
  • 约瑟夫环(java)

    问题描述:n个人围成一圈,每隔k个杀死一个,问最后的幸存者的编号

    假设标号是0 ~ n-1,幸存者是f[n]

    1、特殊情况:f[1]=0

    2、一般情况:f[n] = (f[n-1]+k)%n

    游戏开始时排序:

    0、1、2、3、4、5、6、7、8……n-1

    第一次被杀死的人的标号是k-1,还剩下n-1个人,此时的排序是:

    k、k+1、k+2、k+3……n-1、0、1、2……k-3、k-2

    重新排序:

    0、1、2、3……n-5、n-4、n-3、n-2

        private static int josephus(int n, int m) {
            if (n == 1) {
                return 0;
            } else {
                return (josephus(n - 1, m) + m) % n;
            }
        }
    

    问题描述:n个人围成一圈,从第一个开始报数,第i次报数时,报到i的出局,问最后的幸存者的编号

    假设标号是0 ~ n-1,幸存者是f[n, k]

    1、特殊情况:f[1]=0

    2、一般情况:f[n, k] = (f[n-1, k+1]+k)%n

    例:

    1次 0 1 2 3 4 5 6 n=7,k=1,+1)%7
    2次 1 2 3 4 5 6 \ 0 1 2 3 4 5 n=6,k=2,+2)%6
    3次 2 3 4 5 0 0 1 2 3 4 n=5,k=3,+3)%5
    4次 3 4 0 1 0 1 2 3 n=4,k=4,+4)%4
    5次 0 1 2 0 1 2 n=3,k=5,+5)%3
    6次 原2 0 现0 1 n=2,k=6,+6)%2
    7次 0

    比如,f(3,5)=(f(2,6)+5)%3 若f(2,6)现在的数字是0,则原来数字是2

        private static int josephus_(int n, int m) {
            if (n == 1) {
                return 0;
            } else {
                return (josephus_(n-1, m+1) + m) % n;
            }
        }
    
  • 相关阅读:
    HTTP状态码的详细解释,供参考
    js中实现页面跳转(返回前一页、后一页)
    CRUD工程师——基础容器LinkedList
    CRUD工程师——基础容器ArrayList
    Servlet入门
    Linux
    flex弹性布局
    div布局
    递归函数
    运算符
  • 原文地址:https://www.cnblogs.com/angelica-duhurica/p/10903583.html
Copyright © 2011-2022 走看看