约瑟夫斯问题(有时也称为约瑟夫斯置换),是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。
有个囚犯站成一个圆圈,准备处决。首先从一个人开始,越过个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。
问题是,给定了和,一开始要站在什么地方才能避免被处决?(引用自*)
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());
}