Java 玩约瑟夫环

今天遇到这样一个一题,杀人游戏

一个国王拉来了一百位死囚犯,让他们围成一个圈,然后选择一个开始报数,报到3 (或者其他数字)

就杀掉,然后又重一开始,这样一直循环的杀 直到最后一个无罪释放,

问 哪一个幸运儿 一开应该站在几号 位置。

public class test {
    public static void main(String[] args) {
        System.out.println(getLucklyNum(8,3));
    }


    public static int getLucklyNum(int num,int x) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 1; i <= num; i++) {                //分别添加到list集合中
            list.add(i);
        }

        int count = 1;
        for (int i = 0; list.size() != 1; i++) {        //只留一个,所以 size != 1 就一直循环
            if (i == list.size()) {                     //当i到最后的时候,归零。

                i = 0;
            }

            if (count % x == 0) {                       // 判断倍数
                list.remove(i--);                       // 注意: 当删除的时候,删除点整体向前移一位,i 就要 --。
            }
            count++;
        }

        return list.get(0);                             //返回仅有的一个数
    }
}

猜你喜欢

转载自blog.csdn.net/Leo_01169/article/details/85323308