天天看點

約瑟夫環--中等難度

//約瑟夫環(約瑟夫問題)是一個數學的應用問題:已知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);

  }