版权声明:本文为博主原创文章,未经博主允许不得转载。 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));
}
}