用页面完整呈现二进制解决毒水问题的过程

283 阅读2分钟

世界上有10种人:一种是懂得二进制的,另一种是不懂二进制的

能看懂上面这段话的内容,说明你懂二进制(二进制10对应十进制中的2)

在解谜游戏中,有一种问题被称为"毒水问题",有7瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出哪瓶水有毒?

答案是最少需要三只就可以解决。

为什么呢?

首先我们可以将7瓶水对应的编号用二进制分别列出来:

  • 第一瓶水: 001

  • 第二瓶水: 010

  • 第三瓶水: 011

  • 第四瓶水: 100

  • 第五瓶水: 101

  • 第六瓶水: 110

  • 第七瓶水: 111

  1. 第一只老鼠只需要喝第一位是1的水_(100,101,110,111)_

  2. 第二只老鼠只需要喝第二位是1的水_(010,011,110,111)_

  3. 第三只老鼠只需要喝第三位是1的水_(001,011,101,111)_

这样只需要三只老鼠就可以喝到所有的水了。

接着我们可以将第一位为1的水混在一个杯子中,然后给老鼠A喝,第二位为1的水混在一个杯子中,然后给老鼠B喝,第三位为1的水混在一个杯子中,然后给老鼠C喝。

24小时候后:

  • 若老鼠A,B存活,老鼠C死亡,则说明A和B都没有喝到毒水,也就是对应的0;C喝到了毒水,也就是对应的1;由此可以推导出毒水的二进制编号为001。

  • 若老鼠A存活,老鼠B死亡,老鼠C存活,则说明A和B都没有喝到毒水,也就是对应的0;C喝到了毒水,也就是对应的1;由此可以推导出毒水的二进制编号为010。

  • ......

以上只是针对7只老鼠喝毒水的问题,如果换成100只,1000只呢,要想列出详细的过程,手动列出是十分麻烦的,于是我写了个html页面,可以手动设置毒水的瓶数,毒水的瓶号是随机生成的,大家有兴趣的话可以试试。