约瑟夫杀人法是这样一个场景:一群人手拉手围成一个圈,依次数数,数到特定的数的那个人就被枪毙,然后他的前后的人手拉手,最后只剩下一个人。这种就是数据结构中的单向循环列表模型。
/**
* 约瑟夫杀人法
* @author Luffy
*
*/
public class Joseph {
public static int M=20;
public static int N=5;
/**
* @param args
*/
public static void main(String[] args) {
//创建一个循环单向链表:
Node head = new Node(1);
Node node = head;
for(int i=2;i<=M;i++){
Node n = new Node(i);
node.next = n;
node = n;
if(i==M) {
node.next = head;
}
}
//注意node的初始位置,这个随你定
int i=1;
while(node.next != node) {
if(i%4 == 0) {//数到4,将后一个枪毙
System.out.println("kill:"+node.next.data);
node.next = node.next.next;
}
node = node.next;
i++;
}
System.err.println("剩下:"+node.data);
}
static class Node{
public int data;
public Node next;
Node(int data) {
this.data = data;
}
}
}
kill:4
kill:9
kill:14
kill:19
kill:5
kill:11
kill:17
kill:3
kill:12
kill:20
kill:8
kill:18
kill:10
kill:2
kill:16
kill:15
kill:1
kill:7
kill:13
剩下:6
网友评论