0
点赞
收藏
分享

微信扫一扫

(约瑟夫环)

践行数据分析 2022-04-08 阅读 71
java

约瑟夫环


public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        int sum = 0;
        for(int i = 2;i<n+1;++i) {
            sum = (sum+k)%i;
        }
        System.out.print(sum+1);
        scan.close();
    }
}

约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒。一群人表决说要死,所以用一种策略来先后kill所有人。
于是约瑟夫建议:每次由其他两人一起kill一个人,而被kill的人的先后顺序是由抽签决定的,约瑟夫有预谋地抽到了最后一签,在kill了除了他和剩余那个人之外的最后一人,他劝服了另外一个没死的人投降了罗马。

我们这个规则是这么定的:
在一间房间总共有n个人(下标0~n-1),只能有最后一个人活命。

按照如下规则去排除人:
所有人围成一圈
顺时针报数,每次报到q的人将被排除掉
被排除掉的人将从房间内被移走
然后从被kill掉的下一个人重新报数,继续报q,再清除,直到剩余一人

举报

相关推荐

A - 约瑟夫环

约瑟夫环

链表:约瑟夫环

约瑟夫环问题

22 约瑟夫环2

0 条评论