01-JAVA基礎—>陣列—>選隊長(約瑟夫)
阿新 • • 發佈:2021-02-06
1-2-3-4-5-6-7-8-9-10-
1-2-3-4-5-7-8-9-10-
2-3-4-5-7-8-9-10-
2-3-4-5-8-9-10-
2-4-5-8-9-10-
2-4-5-8-9-
2-4-5-8-
4-5-8-
4-8-
4
/**
*
* @param n 一共有多少個人 報數
* @param start 從第幾個開始報數
* @param step 報數的步長
* @return
*/
public int getResult(int n,int start,int step){
int[] all= null;
//初始化這個佇列
if(all==null){
all=new int[n];
for(int i=0;i<n;i++){
all[i]=i+1;
}
}
//計算出陣列的開始數下標
int startIndex=start%n-1;
while(all[1]!=0){
for(int i=0;i<n;i++){
System.out.print(all[i]+"-");
}
System.out.println();
//計算出要刪除陣列的下標
int removeIndex= (startIndex+step-1)%n;
startIndex=removeIndex;
//將後面的數字往前移動一個位置
while(removeIndex<n-1){
all[removeIndex]=all[removeIndex+1];
removeIndex++;
}
//將最後一個位置的數字設定為0
all[n-1]=0;
//每次只刪除一個
n--;
}
System.out.println();
return all[0];
}
/**
* @param args
* 測試
*/
public static void main(String[] args) {
Demo01050_zy22 josephus=new Demo01050_zy22();
System.out.println(josephus.getResult(10, 2, 5));
}