猴子报数选国王问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/whitesun123/article/details/82720775

问题: 猴子选大王,假设有M个猴子围成一圈,从1开始报数,数到N的猴子退出,最后剩下的猴子就是大王, 写出程序求出最后是大王的那只猴子最初的位置。

解析:问题本来只需要求解剩下猴子的序号,现在提出一个要求,要求把呗淘汰猴子的顺序记录下来,只需要再创建一个List即可

import java.util.ArrayList;
import java.util.List;

/*
 * 
 * 猴子选国王问题,要求选出猴子出局的顺序
 * */
public class Solution {
	public static List<Integer> getOutQue(int[] a,int flag){
		List<Integer> result = new ArrayList<>();
		int restaNum = a.length;//数组长度
		int count  = 1;//计数器
		int i = 0;//猴子
		while(restaNum!=1){
			if(a[i]!=0){
				if(count == flag){
					count = 1;//计数器清零
					result.add(a[i]);//将出局的猴子放入一个集合
					a[i] = 0;//出局的猴子置0
					restaNum--;//剩余数量减一
				}
				else{
					count++;
				}
						
			}
			i = (i+1)%a.length;;
			
		}
		for(int j = 0; j < a.length; j++){
			if(a[j] != 0){
				System.out.println("第" + (j+1)+ "只猴子被选为大王!");
			}
			//result.add(j);
		}
		return result;
	}
	public static void main(String[] args) {
		int[] a = new int[]{1,2,3,4,5,6,7,8,9};
		int flag = 3;
		
		System.out.println(getOutQue(a ,flag));
	}
	
	
}

猜你喜欢

转载自blog.csdn.net/whitesun123/article/details/82720775