1. 程式人生 > >設有n個人依圍成一圈,從第1個人開始報數,數到第m個人出 列,然後從出列的下一個人開始報數,數到第m個人又出列,…,如此反覆到所 有的人全部出列為止。設n個人的編號分別為1,2,…,n,打印出出列的順

設有n個人依圍成一圈,從第1個人開始報數,數到第m個人出 列,然後從出列的下一個人開始報數,數到第m個人又出列,…,如此反覆到所 有的人全部出列為止。設n個人的編號分別為1,2,…,n,打印出出列的順

public class weichengquan{//設有n個人依圍成一圈,從第1個人開始報數,數到第m個人出
                     //列,然後從出列的下一個人開始報數;輸出出列的順序來
  public void play(int num,int step){
  int[] numS=new int[num];
  int tep=0;//記錄步數;1<=tep<=step
  int sd=0; //只有當sd等於陣列長度-1時,說明都出列完畢了,每次有出列的都會置零;
  ff:       //本題目的要點;在遍歷完一邊陣列後,tep是不置零的;
  while(true){
 if(sd==numS.length-1)//如果相等,說明出列完畢,跳出迴圈
  break ff;
  for(int i=0;i<numS.length;i++){
 if(numS[i]!=1&&tep!=step){
  tep++;
}else if(numS[i]==0&&tep==step){
  System.out.println(i);
  numS[i]=1;
  tep=0;
  sd=0;
  }else
  sd++;
  }
  
  }
  }
       public static void main(String[] args){
      weichengquan fd=new weichengquan();
      fd.play(20, 3);
       }
}