欢迎光临散文网 会员登陆 & 注册

用7只老鼠从111瓶药检测出1瓶毒药

2020-05-21 12:21 作者:手艺仙人  | 我要投稿

不久前刷贴吧的时候又双叒叕看到了这个问题,大致内容就是用7只老鼠检测111瓶药剂,选出唯一的一瓶毒药,且毒性一小时后发作,用最短的时间检测出来。这应该算比较久远的题了吧,百度的回答基本都是基于二进制进行解答,答案也是对的,但仍有相当一部分人难以理解,所以,本着求(chi)真(bao)务(cheng)实(de)精神,将此问题重新简单化地做一遍。

首先,这问题的关键就是在于怎么用斯巴达耗子们检测或者说是喂食方案是啥个样子,当时贴吧的那个贴的评论里大部分都是纠结这个问题。

那么先把问题简单化一点,用3只耗子检测8瓶药剂。先引入一个集合的概念,有集合{1,2,3}对应这耗子1,耗子2,耗子3,它的子集就有——空集,{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}这样8个,依次分别对应药剂不喂食,只喂食耗子1,只喂食耗子2……那么这样,喂食的方案就解决了,用方案依次对应试剂1到8,试剂1不喂食,试剂2只喂食耗子1……

于是,一小时以后,如果一只耗子都没嗝屁,也就是说,一只耗子都没有喝到这瓶毒药,那么,试剂1是毒药,因为只有它的方案,能保证所有耗子们都不接触。但如果只有耗子2存活了呢?依此看,有瓶毒药,耗子1和3喝了,耗子2没喝,这个方案就是集合{1,3},对应的就是6号试剂。

集合的举例到此为止,还是回归二进制的解题方案,思路大致和集合一样,1表示喂食,0表示不喂食。然后喂食方案就有0000000~1111111,128种,对应1~128号试剂的喂食方案,这样也就解释了为什么n只老鼠能够检测2^n瓶药剂,而题中只要求111瓶就可以。

如果说一小时后的结果是耗子1、3、5、7没了,换句话说,一瓶毒药就只有1、3、5、7喝了,对应方案1010101。

那么,这瓶试剂就是86。

以此类推……

这样,唯一的一瓶毒药就能在最短时间里取得。

是不是很简单

用7只老鼠从111瓶药检测出1瓶毒药的评论 (共 条)

分享到微博请遵守国家法律