1. 程式人生 > >15個猴子圍城一圈選大王,依次1-7迴圈報數,報到7的猴子會被淘汰,直到最後一隻猴子成為大王,問:哪隻猴子會最終成為大王!

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)+"只猴子");
        }
    }