约瑟夫占位问题

面试题中的考查:

 其实这个就是一个约瑟夫问题,下面通过讲解你会很好的解决这道题目。

故事背景

据说在罗马帝国时期,一群犹太士兵被罗马人包围,为了不当罗马人的俘虏,犹太士兵们决定集体自杀,自杀的方式是所有人围成一个圈,第一个士兵会杀掉他左面的第二个士兵,同样,第三个士兵杀掉第四个士兵……以此类推,知道最后只剩下一个人,然后他再自杀。犹太士兵里有个人叫约瑟夫,他想投降保命但又不敢明说,那么约瑟夫应该站在那个位置才能够活下来?

其实这个问题,可以简化出两个模型:

(一)去1留2

去1留2是指:n个人进行1、2循环报数,报1的人离开,报2的人留下,那么最后留下的人是原来的几号?

  • 当总人数是2的n次方形式

例如当人数为4(2的2次方)时,进行循环报数,最后留下来的人是原来的几号?

 由图中可以看到,最后留下来的数字是4.

当人数为8(2的3次方)时,进行循环报数,最后留下来的人是原来的几号?

 最后留下来的数字是8.

再多举几个例子,我们可以发现规律:当总人数是2的n次方形式时,最后留下来的数字是第2的n次方个,即最后一个。

  • 当总人数不是2的n次方形式

这里可以利用转化思想:将人数不是2的n次方形式转化成是2的n次方形式,在利用上面的规律,便可以得到最后留下来的数字。

例如,当人数是6时,我们可以将6写成4+2,即  6-2=4: 如果我们先去掉两个数字1、3,剩余的数字个数(2、4、5、6)就是2的n次方个,这时留下的数字就是剩余人数的最后一个。

 但是要注意,此时剩余的数字的开头不是2,而是5,相当于5成为新的开头,是进行第一个报数的,相对的4就是最后一个,所以最后一个数字就是4.

我们也可以发现,最后一个数字就是第一个报数5的前一个,而这个数就是起初要淘汰俩个人进行报数的最后一个(1、2、3、4),所以可以总结出一个公式:

当人数为x时,x =  a+2的n次方(a大于等于0);

留下来的数字是原来的y号,y = 2*a。 

我们可以来验证一下:例如当人数为10个人时,x = 2+2的3次方;y = 2*2 = 4,所以最后一个数字是原来的四号。

(二)去2留1

去1留2是指:n个人进行1、2循环报数,报2的人离开,报1的人留下,那么最后留下的人是原来的几号?

  • 当总人数是2的n次方形式

例如当人数为4(2的2次方)时,进行循环报数,最后留下来的人是原来的几号?

当人数为8(2的3次方)时,进行循环报数,最后留下来的人是原来的几号?

 由两个例子可以看出,留下来的数字是原来第一个报数的。

再多举几个例子,我们可以发现规律:当总人数是2的n次方形式时,最后留下来的数字是第一个报数的人。

  • 当总人数不是2的n次方形式

这里可以利用转化思想:将人数不是2的n次方形式转化成是2的n次方形式,在利用上面的规律,便可以得到最后留下来的数字。

利用同样的分析方法,我们可以得到结论:

当人数为x时,x =  a+2的n次方(a大于等于0);

留下来的数字是原来的y号,y = 2*a+1。 


再回到我们的面试题,"单数"指的是奇数,教练下令“单数运动员出列”即为要求奇数编号的运动员出列。奇数也就代表1、3、5……之类的数,也就是上述讲解的 “去1留2”模型,带入公式,我们可以得到最后一个运动员是最开始的第几号:

50 = 32 + 18;则留下来的运动员是最开始的2*18号,也就是36号。


本次内容到此结束了!如果你觉得这篇博客对你有帮助的话 ,希望你能够给我点个赞,鼓励一下我。感谢感谢……

参考资料:

【小学数学—约瑟夫站位问题】https://www.bilibili.com/video/BV1hh411J7Hx?vd_source=564abed1c36a31978eb9de7cdc6668d2

封面获取:

【你应该站在哪个位置,才能活到最后?】https://www.bilibili.com/video/BV1KM4y1V7tQ?vd_source=564abed1c36a31978eb9de7cdc6668d2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值