public void 猴子报数(){
//m只猴子围成一圈报数,报n的猴子自动离开,
//然后下一位重新从1开始报数,一直循环,
//最后剩下的那个猴子就是猴大王,
//写出程序求出最后是大王的那只猴子最初的位置。
//m,n 需要设置
//报数出局时 记录出局猴,在所有猴都报完一轮数后进行清算
//然后继续
List<Integer> list=new ArrayList();
int m[]=new int[11]; //装填7只猴子 7可变
for (int i=1;i<=m.length;i++){
m[i-1]=i;
list.add(m[i-1]);
}
int b=4; //设置报数 报到3就 gck 3可变
List<Integer> cj=new ArrayList<>();
int i=1;//报数从1开始
while(true){
for (Integer integer : list) { //遍历猴 猴报数
//System.out.println(integer+"号喊"+i);
i++;
if (i%(b+1)==0){ //代表有猴出局了
cj.add(integer); //记录出局的猴 记录元素
// System.out.println(integer+"号出局");
i=1;// 出局代表需 重置报数到1
}
}
//到此处代表一轮已过,到清算时间
for (int j = cj.size(); j>=1 ; j--) {//开始清算
list.remove(cj.get(j-1)); //清算的是元素 不是索引
}
//清空清算名单
cj.clear();
System.out.println("一轮过后的list"+list);
// System.out.println("此时i="+i);
if (list.size()==1){ //当只剩最后一个时退出
break; }
}
System.out.println("猴王是:"+list.get(0)+"号");
}
|
|