约瑟夫问题讲解解法

 据说在罗马时期                                                                                                                               犹太士兵被古罗马士兵包围                                                                                                             于是他们决定集体自杀

        自杀的方式是所有的士兵围成一个圆,每个士兵轮流杀掉左边的那个士兵,一直杀到还剩一个,剩下的那个士兵自杀。

        其中有一个士兵叫做约瑟夫,其实他想投降,但是他又不敢明说,所以他想成为最后一名士兵,那么他应该站在哪里?

    目录:

  1. 细节讲解
  2. 暴力思路(懒得写......)
  3. 简易c++思路+解法

1.细节讲解

        所有n个士兵围成一圈,我们将其序号标为1~n,首先我们可以知道(每轮)偶数号必死,将死的剔除,重新编号(这只是思路),偶数号的又必死。而且我们可以发现,如果人数n位2的次方,那么1号肯定是最后剩下的那个人。

2.暴力思路

        从1号开始往后循环,且移动方式为k=(k+移动人数)%n,这是为了防止下标越界,用a数组来存编号,初始化就为0,如果第k个被杀,就标为-1。应该循环到只有一个不为-1࿰

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值