1. 程式人生 >實用技巧 >其它 >01-JAVA基礎—>陣列—>選隊長(約瑟夫)

01-JAVA基礎—>陣列—>選隊長(約瑟夫)


技術標籤:java學習筆記java

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));
	}