/**
* Created by lxx on 2017/5/6.
*/
/**
* 用Queue来实现Josephus问题
* 在这个古老的问题当中, N个深陷绝境的人一致同意用这种方式减少生存人数:
* N个人围成一圈(位置记为0到N-1),
* 并且从第一个人报数, 报到M的人会被杀死, 直到最后一个人留下来
* @author
*
*/
public class Josephus {
private static class Node {
int data;
Node next;
public Node(int i) {
data = i;
}
}
public static void execute(int n, int m) {
Node header = new Node(0);
Node pointer = header;
for (int i = 1; i < n; i++) {
pointer.next = new Node(i);
pointer = pointer.next;
}
pointer.next = header;
while (pointer != pointer.next) {
for (int i = 1; i <= m; i++) {
pointer = pointer.next;
}
System.out.println(pointer.next.data);
pointer.next = pointer.next.next;
}
System.out.println(pointer.next.data);
}
public static void main(String args[]){
Josephus circle = new Josephus();
circle.execute(8,4);
}
}