方法1:
public class Monkey {
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义猴子数组
boolean[] monkey = new boolean[15];
//循环赋值 使全部猴子的值为true
for (int i = 0; i < 15; i++) {
monkey[i]=true;
}
System.out.println("猴子王的数组下标为"+wang(pauchu(monkey)));
}
public static boolean[] pauchu(boolean[] monkey ){
//顶定义一个 数当n%7时 就是当猴子被排除
int count=0;
//定义一个数 为猴群还剩几只猴子
int num;
do{
num=0;
for (int i = 0; i < 15; i++) {
//当猴子为false时 跳过赋值
if(monkey[i]==false){
continue;
}
count++;
//当n为7的倍数时淘汰,即数到7的时候淘汰
if(count%7==0){
monkey[i]=false;
}
//当只剩下一个true的时候跳出循环
if(monkey[i]==true){
num++;
}
}
}while(num!=1);
return monkey;
}
public static int wang(boolean[] monkey){
for (int i = 0; i < 15; i++) {
if(monkey[i]==true){
return i;
}
}
return 0;
}
}
方法二:数组缩容
public class Monkey02 {
public static void main(String[] args) {
//定义一个数组存放猴子
int[] monkey = new int[15];
for (int i = 0; i < monkey.length; i++) {
monkey[i]=i+1;
}
int count=1;
int i=0;
while(monkey.length>1){
if(count%7==0){
System.out.println(Arrays.toString(monkey)+"c"+count+"i"+i);
for (int j = 0; j < monkey.length-i-1; j++) {
monkey[i+j] = monkey[i+j+1];
}
monkey=Arrays.copyOf(monkey, monkey.length-1);
count=0;
//重点思考这里为什么
i--;
}
i++;
if(i>=monkey.length){
i=0;
}
count++;
};
System.out.println("猴子王是第"+Arrays.toString(monkey)+"只猴子");
}
}