[Java]使用队列求解josephus问题
约瑟夫斯问题(有时也称为约瑟夫斯置换),是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。
有个囚犯站成一个圆圈,准备处决。首先从一个人开始,越过个人(因为第一个人已经被越过),并杀掉第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()); }