java——约瑟夫环

问题描述:一圈人(n个)围着一起报数,报到x的淘汰,规定最后场上剩下的y人为胜利者。

    /**
     * 约瑟夫环,用数组方法解决
     * @param personNumber  总人数
     * @param number         报到就淘汰的数字
     * @param survive        最后需要留的人数
     */
    public static void josephRing(int personNumber,int number,int survive) {
        int[] array = new int[personNumber]; //先把人放到数组里面,数组下标就是编号
        int m = 0;  //计数
        int n = personNumber;  //报到number数的人数
        while(n > survive) {
            for (int i = 0; i < array.length; i++) {
                if (array[i] == 0) {
                    m++;
                    if (m == number) {
                        m = 0;  //如果数到number数字,该人出局,重新从1开始数数
                        array[i] = 1; //将报了number数的人标记为1
                        n--;   //报一个number少一个人
                        System.out.println(i + 1 + "号淘汰");
                    }
                }
            }
        }

        for(int i = 0;i < array.length;i++) {
            if(array[i] == 0) {
                System.out.println(i+1+"号成功");
            }
        }

    }

猜你喜欢

转载自blog.csdn.net/QQ2899349953/article/details/83515901