Java 解決約瑟夫問題

約瑟夫問題(有時也稱爲約瑟夫斯置換,是一個出如今計算機科學數學中的問題。在計算機編程的算法中,相似問題又稱爲約瑟夫環。又稱「丟手絹問題」.)java

有這樣一個故事,15個教徒和15個非教徒在深海遇險必須講一半的人投到海中,其他的人才能獲救,因而想出這樣過一個辦法,30我的圍城一圈。從第一我的開始一次報數,每次數到9,就將這我的扔到海中,直到剩餘15我的爲止。問怎樣的排法,使得每次扔到海中都是非教徒算法

 

如今的一種辦法就是一個Boolean數組來模擬30我的,非教徒爲false。剛開始都沒true,當數到9就爲false,若是當前位置已經爲false,就一到下個不爲false 的位置。編程

 

算法代碼以下數組

package com.huwei.java;

public class Test {

	public static void main(String[] args) {
		Boolean[] userBoolean = new Boolean[30];
		for (int i = 0; i < userBoolean.length; i++) {
			userBoolean[i] = true;
		}
		for (int i = 0; i < userBoolean.length; i++) {
			System.out.print(i+"="+userBoolean[i]+"  ");
		}
		System.out.println();
		int count = 0;
		int length = userBoolean.length;
		int index = 0;
		
		while (length >15) {
			count ++ ;
			if (count == 9) {
				count = 0 ;
				while (!userBoolean[index]) {
					index ++ ;
				}
				userBoolean[index] = false;
				length -- ;
			}
			index ++; 
			if(index == userBoolean.length) index = 0;
		}
		for (int i = 0; i < userBoolean.length; i++) {
			System.out.print(i+"="+userBoolean[i]+"  ");
		}
	}

}

  結果以下spa

相關文章
相關標籤/搜索