//約瑟夫環(約瑟夫問題)是一個數學的應用問題:已知n個人(以編号1,2,3...n分别表示)圍坐在一張圓桌周圍。從編号為k的人開始報數,數到m的那個人出列;
//其他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍...
public class App5_3 {
public static void main(String[] args)
{
final int N=13,S=3,M=5; //從第3個人開始,順序數到第5個人,則出圈,依次進行
int i=S-1,j,k=N,g=1;
int []a=new int[N];
for(int h=1;h<=N;h++)
a[h-1]=h; //把每個人的編号存入數組中,數組的下标從0開始
System.out.print("\n出圈的順序為:");
do
{
i=i+(M-1); //i代表出圈人的下标
while(i>=k)
i=i-k; //當數組的下标大于等于圈中人數時,将數組的下标i減去圈中的人數k
System.out.print(" "+a[i]);
for(j=i;j<k-1;j++)
a[j]=a[j+1]; //a[i]出圈後,将後續人的編号前移
k--; //圈中的人數k減1
g++; //g為循環控制變量
}while(g<=N);
}