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);                             //返回仅有的一个数
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值