码农们来做题吧:约瑟夫杀人事件
版主: hci
码农们来做题吧:约瑟夫杀人事件
说是有n个码农(这个n可能很大,可能有几个亿),排成1个圆圈。现在从1开始1,2报数,报到2的人就被杀了,现在问第k(1<=k<=n)个被杀的码农原来的排号是多少?别想用链表或者有序数组做循环,因为码农太多,会超时的。
以习近平思想为指导,不忘初心,牢记使命,狠抓海外华人的思想政治工作
Re: 码农们来做题吧:约瑟夫杀人事件
条件不够吧?杀了一个之后,然后是从谁,从几开始数呢?
Rabboni 写了: 2022年 9月 2日 08:45 说是有n个码农(这个n可能很大,可能有几个亿),排成1个圆圈。现在从1开始1,2报数,报到2的人就被杀了,现在问第k(1<=k<=n)个被杀的码农原来的排号是多少?别想用链表或者有序数组做循环,因为码农太多,会超时的。
所谓女性解放,就是人类走向灭亡的开端
倭杂殖人滚粗
消灭买办是唯一出路
哈,狗子急了
Re: 码农们来做题吧:约瑟夫杀人事件
只要活着就往下数。譬如5个人,12,3,4,5,第一轮2,4被杀,然后是1被杀,然后5被杀,3是最后温拿。
以习近平思想为指导,不忘初心,牢记使命,狠抓海外华人的思想政治工作
Re: 码农们来做题吧:约瑟夫杀人事件
一个简单版问题是,任意给n个人,排成圆圈,隔一杀人(跟上面一样),谁是最后温拿?这个是算术题,不需要编程。
以习近平思想为指导,不忘初心,牢记使命,狠抓海外华人的思想政治工作
Re: 码农们来做题吧:约瑟夫杀人事件
温拿index = ceiling(log2n)
Rabboni 写了: 2022年 9月 2日 08:45 说是有n个码农(这个n可能很大,可能有几个亿),排成1个圆圈。现在从1开始1,2报数,报到2的人就被杀了,现在问第k(1<=k<=n)个被杀的码农原来的排号是多少?别想用链表或者有序数组做循环,因为码农太多,会超时的。
所谓女性解放,就是人类走向灭亡的开端
倭杂殖人滚粗
消灭买办是唯一出路
哈,狗子急了
Re: 码农们来做题吧:约瑟夫杀人事件
差不多吧,虽然序列是从1开始的,所以应该减一。
如果用编程的话非常简单,就是把二进制的最高位移到最低位,譬如23,二进制是10111,高位移到低位就变成了1111,所以结果是15。
以习近平思想为指导,不忘初心,牢记使命,狠抓海外华人的思想政治工作