1000瓶药水,1瓶有毒药,几只小白鼠能够找出?

1000瓶药水,1瓶有毒药,几只小白鼠能够找出?


原文链接: https://www.jianshu.com/p/607d6683748b

条件:

现有1000瓶药,其中有一瓶毒药,喝了之后1小时后才产生效果,现在你有10只老鼠和1个小时的时间,请问怎么找出毒药?

问题:

现在给1周的时间,用10只老鼠找出1千瓶水中的那瓶水。

解答:

思路: 老鼠被喂药后,只有 不死两只状态。所以其实就是可以理解为需要几位二进制数能表示表示这1000种状态。
,让我们能区分开来这1000瓶毒药。

  1. 计算需要多少只老鼠:需要表示的1000瓶水(状态),最少需要log2(n)只老鼠来表示。本次需要log2(1000) = 10 只老鼠进行表示
  2. 将所有的水按照,1、2、3。。。。。1000编号,并全部转为二进制表示。例如3为 00000 00011,1000为 11111 01000。
  3. 老鼠按照1、2、3。。。编号,把所有第一位为1的水混在一起喂给一号老鼠,把所有第二位为1的水混合在一起喂给二号老鼠。按照规律喂给所有老鼠。
  4. 一小时后,统计十只老鼠的状态,死了相应位记为1,活着相应位记为0。按照老鼠编号1-10对应bit位从低到高,对应的10进制即为有毒药水的编号。

第二种变体

如果1000瓶里有2瓶毒药,需要多少只小鼠?

1000瓶里1瓶毒药有1000种可能性,而1000瓶2瓶毒药则有C(1000,2),即499500种可能性,那么log2(499500) 为18.93,即需要19只小鼠。具体实现方式为以两两混合法将1000瓶拆成499500滴,并用题目1中的方法测得。
那么对1000瓶中的N瓶毒药,则需要log2(C(1000,N))只小鼠,若N>=500,则取C(1000,1000-N)。

第三种变体

有16瓶水1瓶有毒,用多少只小白鼠能测出14瓶无毒的水?

将16瓶药水用二进制XXXX表示,取3只小白鼠来测,测出的状态为XXX,那么毒在XXX0或XXX1中,剩下14瓶无毒。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值