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

相关文章
相关标签/搜索