[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("\nSafe: "+queue.dequeue());
    }
posted @ 2015-02-04 12:02  夏方方  阅读(376)  评论(0编辑  收藏  举报