ACM:数论专题(3)——约瑟夫问题


(p.s: 以前做约瑟夫问题都是用链表模拟,今天发现了一个效率更高的方法,受教了。。。)

题目描述:

    小Hi和小Ho的班级正在进行班长的选举,他们决定通过一种特殊的方式来选择班长。

    首先N个候选人围成一个圈,依次编号为0..N-1。然后随机抽选一个数K,并0号候选人开始按从1到K的顺序依次报数,N-1号候选人报数之后,又再次从0开始。当有人报到K时,这个人被淘汰,从圈里出去。下一个人从1开始重新报数。

    也就是说每报K个数字,都会淘汰一人。这样经过N-1轮报数之后,圈内就只剩下1个人了,这个人就作为新的班长。

    举个例子,假如有5个候选人,K=3:

    初始 0: 0 1 2 3 4 
    从0号开始报数,第1次是2号报到3
         1: 0 1 - 3 4   // 0 1 2, 2号候选人淘汰 
    从3号开始报数,第2次是0号报到3
         2: - 1 3 4     // 3 4 0, 0号候选人淘汰
    从1号开始报数,第3次是4号报到3
         3: 1 3 -       // 1 3 4,   4号候选人淘汰
    从1号开始报数,第4次是1号报到3
         4: - 3         // 1 3 1, 1号候选人淘汰<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值