package 约瑟夫问题;
public class MainClass {
public static void main(String[] args) {
Cyclink cl = new Cyclink();
cl.setLen(1000000000);
cl.createLink();
int k=3;
cl.play(1, 3);
}
}
class Node{
int num;
Node next;
public Node(int num) {
this.num = num;
}
}
class Cyclink{
Node firstnode=null;
Node temp=null;
int len=0;
public void setLen(int len){
this.len=len;
}
public Cyclink() {
}
public void createLink(){
for (int i=1;i<=len;i++){
if (i==1){
Node node=new Node(i);
firstnode=node;
temp=node;
}else{
if(i==len){
Node node=new Node(i);
temp.next=node;
temp=node;
temp.next=firstnode;
}else{
Node node=new Node(i);
temp.next=node;
temp=node;
}
}
}
}
public void print(){
Node temp=firstnode ;
do{
System.out.println(temp.num);
temp=temp.next;
}while (temp!=firstnode);
}
public void play(int k,int m){
Node temp=firstnode ;
for(int i=1;i<k;i++){
temp=temp.next;
}
while(len!=1){
for (int i=1;i<m;i++){
temp=temp.next;
}
Node temp2=temp;
while(temp2.next!=temp){
temp2=temp2.next;
}
System.out.println(temp.num);
temp2.next=(temp.next);
temp=temp.next;
len--;
}
System.out.println("最后"+temp.num);
}
}