有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药。任何喝下毒药的生命都会在一星期之后死亡。现在你只有10只小白鼠和1个星期的时间,如何检验出哪个瓶子有毒药?

 

答案:

首先呢,把这1000个瓶子编号为1-1000,之后把编号转换为二进制(这样好理解一点,实际上利用的还是排列组合的原理),二进制数据取得十位,正好与十只小白鼠想对应,之后对于数字N来说,例如127 == 0000111111,第四到第十位都是1,那么就把127编号瓶子的水喂给地四到十号老鼠,换个数,例如 125 == 0000111101,则将此瓶药水喂给地四,五,六,七,八和十号老鼠,(在第一天就要把所有瓶子的水给老鼠喂了,不考虑老鼠会不会撑死),最后等一星期结束后,根据死亡老鼠的编号就可以逆推出有毒瓶子的编号了,例如死亡的老鼠是,第2 ,3,5,7,8号老鼠,则对应的有毒瓶子的编号为 0110101100,自己转换成十进制吧,吼吼