题目
Josephus问题。在这个古老的问题中,N个身陷绝境的人一致同意通过以下方式减少生存人数。他们围坐在一圈(位置记为0到N-1)并从第一个人开始报数,报到M的人会被杀死,知道最后一个人留下来。传说中Josephus找到了不会被杀死的位置。编写一个Queue的用例Josephus,从命令行接受N和M并打印出人们被杀死的顺序(这也将显示Josephus在圈中的位置)。
% java Josephus 7 2
1 3 5 0 4 2 6
思路
比较暴力的解法。没想出来更好的解法==。
代码
package Chap1.$3;
import edu.princeton.cs.algs4.Queue;
public class E37
{
public void Josephus(int N,int M)
{
Queue<Integer> Josephus=new Queue<Integer>();
for(int i=0;i<N;i++)
{
Josephus.enqueue(i);
}
for(int i=0;i<N;i++)
{
for(int j=0;j<M-1;j++)
{
Josephus.enqueue(Josephus.dequeue());
}
System.out.print(Josephus.dequeue()+" ");
}
}
public static void main(String[] args)
{
new E37().Josephus(7,2);
}
}