记一次二进制的小白鼠试毒问题

捷信的面试失败经历

面试官:给我10瓶水,其中一瓶有毒,你可以用多少只小白鼠试出来有毒的那瓶水
题目要求,不能1只小白鼠一瓶瓶试,毒会在1小时后发作。

我:.....
心路历程:说实话之前的问题已经给我问懵了,已经要结束面试的时候,由于我个人总结的个人优缺点打动了面试官,又给我一个机会。
我想了很久,陷入了一个思维固区,就是我以为一个小白鼠一次只能喝一瓶水。实际不然(后面百度才知道的)
实际上是一道典型的二进制的组合方式的题
我先以8瓶水举例,2^3
网上都没说的一点是8瓶水实际是要-1的(单甩出一瓶,如果7瓶水的排列组合一个老鼠都没死,就是这瓶有毒)

以7瓶水为基准 三只小白鼠。
那么组合有

      A/B/C
0 = 0 0 0   
1 = 0 0 1
2 = 0 1 0
3 = 0 1 1
4 = 1 0 0
5 = 1 0 1
6 = 1 1 0
7 = 1 1 1
可以看出A喝:4 5 6 7

               B喝:2 3 6 7

               C喝:1 3 5 7
然后就是简单的逻辑了

C死  AB活   1有毒(AB都没有喝过1)

B死  AC活   2有毒(AC都没有喝过2)

BC死   A活  3有毒(只有A没有喝过3)

A死  BC活   4有毒(BC都没有喝过4)

……(这里就不一个个写了)
一直到ABC都死 7有毒

其实也能发现二进制实际代表的生死,不用这么一个个的推导
例如4=100 1代表死 0代表活 对应了上面的推导

所以答案只跟2的N次方有关系,例如有11瓶水 那么答案是4 因为:2^4=16   11>8 但11<16

最近在准备面试 有一起面试的小伙伴加我微信wjy550823795 或者扫码进入



 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值