题目:1000瓶药水,1瓶有毒药,服用后一小时毒发,毒药可以无限稀释,那么一小时内用几只小白鼠能够找出毒药?

不钻牛角尖,不是IQ题。这个题目网上其他博客已经有很详细的答案,这里主要用一种更好理解的方式去呈现。

将问题规模缩小去理解解决方法。具体实现与3老鼠确定8瓶子原理一样

 

第一,毒药可以混合;第二,注意题目的限制条件;

二进制算法问题解析——1000瓶药水,1瓶有毒药,几只小白鼠能够找出?

 

从0-7的顺序将三位的二进制数按顺序(如图)写出来,写好之后从横向看,三行就分配给三只老鼠,一代表是用这些瓶子的毒药做

了混合,零就是没有用到这些瓶子里的毒药。

 

然后,根据这图你会发现,其实这样排列的话,就所有瓶子,先拿出一半(对于第一只老鼠),然后到第二只老鼠的时候,其实也

是从上一轮分半的瓶子里再分半的,到第三轮(第三只老鼠),就是从上一轮(第二只老鼠里的分好的一半里)再分半使用。

 

这样8个瓶子,分三次之后就不能再分,类似与于每一次不断减半,有点类似于二分搜索。

 

然后你想,如果一号死了,说明毒药在后四瓶里,如果一号没死,就同理知道在前四瓶里。

因此,后两轮也是这样的推理思想

 

这里说轮其实不太准确,但是就是为了更好的表达,不准确是因为用第几轮好像有一个先后顺序,其实三只老鼠是可以同时喝的,就是三行是同时执行的,完全不用有先后顺序。

 

所以总结一下答案就是:(0号瓶子的毒药始终没有用来混合,这个点,必须要知道,而且不用觉得奇怪。)

“×”代表死了,“√”代表没死;

二进制算法问题解析——1000瓶药水,1瓶有毒药,几只小白鼠能够找出?

 

 

 

相关文章: