约瑟夫将军抓到一群俘虏,需要剩下一个人回去给敌军报信。让俘虏围成一圈,从1数数,数到某个数时,杀掉一个人,重新开始从1数数。直到剩下一个人。
历史上谁杀得人最多 —-约瑟夫
package recursion;
public class Joseph {
public static int N =20;
public static int M = 5;//数到M就删除
public void deleteNode() {
Node header = new Node(1);
Node x = header;//目前被点到的人
for(int i=2;i<=N;i++) {
x = (x.next = new Node(i));
}
x.next = header;
System.out.println("被删除的顺序:");
while(x.next != x) {
for(int i =1;i<M;i++) {
x = x.next;
}
System.out.println("被删除的 "+x.next.val);
x.next = x.next.next;
}
System.out.println("保留的是"+x.val);
}
public static void main(String[] args) {
Joseph j = new Joseph();
j.deleteNode();
}
class Node{
int val ;//下标
Node next;
public Node(int val) {
this.val = val;
}
}
}