算法:猴子选大王问题(约瑟夫环)

package cn.itcast.execise;
/*
 * 	15个猴子围成一圈选大王,依次1-7循环报数,报到7的猴子被淘汰,
 * 直到最后一只猴子成为大王。问:哪只猴子会成为大王?
 * 
 * 
 * */
public class Execise05 {

	public static void main(String[] args) {
		//布尔数组---表示猴子的状态
		boolean[] bs=new boolean[15];
		//初始化 true表示的是未淘汰 false就表示淘汰
		for (int i = 0; i < bs.length; i++) {
			bs[i]=true;
		}
		//剩余猴子数
		int monkeyleft=15;
		//报数
		int num=0;
		//数组下标
		int index=0;
		//循环
		while(monkeyleft>1){
			//判断猴子是否被淘汰
			if(bs[index]){
				//开始报数
				num++;
			}
			//知道num==7时候,淘汰猴子
			if(num==7){
				//报数置为0
				num=0;
				//数组元素置为false
				bs[index]=false;
				//猴子数减少
				monkeyleft--;
			}
			//下标往后移
			index++;
			//到最后一个猴子置为0
			if(index==15){
				index=0;
			}
		}
		//遍历原数组
		for (int i = 0; i < bs.length; i++) {
			if(bs[i]){
			System.out.println("monkeyking:"+(i+1));
			break;
			}
		}

	}
}

猜你喜欢

转载自blog.csdn.net/weixin_44519263/article/details/88198490