15個猴子圍城一圈選大王,依次1-7迴圈報數,報到7的猴子會被淘汰,直到最後一隻猴子成為大王,問:哪隻猴子會最終成為大王!
方法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)+"只猴子");
}
}