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

猜你喜欢

转载自www.cnblogs.com/gxr-boke/p/9960623.html