問題描述:
約瑟夫環運作如下:
1、一群人圍在一起坐成[2] 環狀(如:N)
2、從某個編号開始報數(如:K)
3、數到某個數(如:M)的時候,此人出列,下一個人重新報數
4、一直循環,直到所有人出列[3] ,約瑟夫環結束
使用循環連結清單實作約瑟夫環是一種解法,但是效率不高。
public class yuesefu
{
static class Node
{
int val;
Node next;
Node(int v)
{
val=v;
}
}
public static void main(String[] args) {
int N=9;//表示總個數
int M=5;//數到幾出列
//頭節點單列出來,友善形成循環連結清單
Node t=new Node(1);
Node x=t;
//建立單向連結清單
for(int i=2;i<=N;i++)
{
x=(x.next=new Node(i));
}
//最後一個節點的next指向第一個節點,形成循環連結清單
x.next=t;
System.out.println("依次出來的順序為:");
while(x!=x.next)
{
for(int i=1;i<M;i++)
{
x=x.next;
}
System.out.print(x.next.val+" ");
x.next=x.next.next;
}
System.out.println();
System.out.println("最後剩餘的是: "+x.val);
}
}