编码学入门,一轮即可,2¹⁰=1024,1024瓶也只要10只老鼠:每瓶编号0~1023,用二进制表示就是10位数,每只老鼠代表其中一位(第0~9位),试喝该位=0的所有512瓶水,死和活两个状态代表0或1,死了就说明毒瓶编号该位=0,没死就是该位=1。
小山丰在知乎上看到这个帖子:有1000个瓶子,其中999瓶是水,1瓶是毒药,外观无法区别。现有10只小白鼠和不限量的干净试管,你怎么找出那瓶毒药? 这题成功吸引了我的兴趣,不知道大家有没有什么高招和好办法。 我思考了一下,感觉题目不太严谨,多少剂量能致死这个条件也很重要,假设1滴便能致死,我的思考如下: 第一步,将1000只瓶子分为10份,每100只瓶子范围抽取一滴到一个干净试管,分别给10只小白鼠饮用,则死的那只小白鼠对应的100只瓶子有嫌疑,从而排除另外900只瓶子,此时剩余9只小白鼠。 第二步,将此100只瓶子分为9份(每份11只或12只),参照第一步方法分别给9只小白鼠饮用。结果死的那只小白鼠可以将嫌疑缩至11或12个瓶子,此时剩8只小白鼠。 第三步,将11或12只嫌疑瓶子分为8份(每份1至2只),参照上述方法,则消耗的那只小白鼠即可确定1至2只嫌疑瓶。此时剩7只小白鼠。 第四步,若有两个嫌疑瓶,则用两只小白鼠试毒。 总结:运气好,则第三步即确定嫌疑瓶,反之第四步,步骤不多,有一定操作可行性。 不知这个思路是否正确,或者有更优化的思路?

