题目:1000瓶药水,1瓶有毒药,服用后一小时毒发,毒药可以无限稀释,那么一小时内用几只小白鼠能够找出毒药?
不钻牛角尖,不是IQ题。这个题目网上其他博客已经有很详细的答案,这里主要用一种更好理解的方式去呈现。
将问题规模缩小去理解解决方法。具体实现与3老鼠确定8瓶子原理一样
第一,毒药可以混合;第二,注意题目的限制条件;
从0-7的顺序将三位的二进制数按顺序(如图)写出来,写好之后从横向看,三行就分配给三只老鼠,一代表是用这些瓶子的毒药做
了混合,零就是没有用到这些瓶子里的毒药。
然后,根据这图你会发现,其实这样排列的话,就所有瓶子,先拿出一半(对于第一只老鼠),然后到第二只老鼠的时候,其实也
是从上一轮分半的瓶子里再分半的,到第三轮(第三只老鼠),就是从上一轮(第二只老鼠里的分好的一半里)再分半使用。
这样8个瓶子,分三次之后就不能再分,类似与于每一次不断减半,有点类似于二分搜索。
然后你想,如果一号死了,说明毒药在后四瓶里,如果一号没死,就同理知道在前四瓶里。
因此,后两轮也是这样的推理思想
这里说轮其实不太准确,但是就是为了更好的表达,不准确是因为用第几轮好像有一个先后顺序,其实三只老鼠是可以同时喝的,就是三行是同时执行的,完全不用有先后顺序。
所以总结一下答案就是:(0号瓶子的毒药始终没有用来混合,这个点,必须要知道,而且不用觉得奇怪。)
“×”代表死了,“√”代表没死;