问题描述:
有N个人被困荒岛,岛上的资源只够1个人生存。他们决定通过以下方式减少生存人数。
所有人围成一圈,并依次编号为0至N-1。从第0号开始报数,报数从1至M,报到M号的人会被杀死。
被杀者后面的人重新开始报数,不断杀死报数为M号的人,直至只留下一个人。
传说Josephus找到了不会被杀死的位置。
Java程序:
public class Josephus {
public static void main(String[] args) {
int N = 7, M = 2;
Queue<Integer> queue = new Queue<Integer>();
for (int i = 0; i<N; i++) {
queue.enqueue(i);
}
while (!queue.isEmpty()) {
for (int i = 0; i<M-1; i++) {
queue.enqueue(queue.dequeue());
}
System.out.print(queue.dequeue() + " ");
}
System.out.println();
}
}
运行结果:
1 3 5 0 4 2 6
输出的最后一位数即为Josephus所在的位置。