zoukankan      html  css  js  c++  java
  • [Java]使用队列求解josephus问题

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

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

    问题是,给定了nk,一开始要站在什么地方才能避免被处决?(引用自维基百科)

     public static void kill(int N,int M){
            Queue<Integer> queue=new Queue<>();
            for(int i=1;i<=N;i++){
                queue.enqueue(i);
            }
            System.out.print("Killed: ");
            while (queue.size()>1){
                for(int i=0;i<M-1;i++){
                    int temp=queue.dequeue();
                    queue.enqueue(temp);
                }
                int killed=queue.dequeue();
                System.out.print(killed+" ");
            }
            System.out.print("
    Safe: "+queue.dequeue());
        }
  • 相关阅读:
    实验四 决策树
    实验三 朴素贝叶斯
    实验2 k近邻
    实验一
    实验三
    第二次实验
    实验一
    ATM取款系统
    流程图与活动图的区别与联系
    第一次随笔
  • 原文地址:https://www.cnblogs.com/xiaff/p/4856509.html
Copyright © 2011-2022 走看看