1000 个瓶子中有一瓶毒药,一只老鼠吃到毒药一周之内会死,如果要在一周之内检测出有毒药的一瓶,问至少需要几只老鼠?
思路:一个简单的思路是利用二进制来解决类似问题,首先看2^10 > 1000,也就是说这类问题只要由所有老鼠组成的二进制的数大于总的瓶子个数一般就能解决此类问题,当然还要注意细枝末节的一些问题。
那么为什么10只老鼠就能判断出那一瓶毒酒呢?
大家知道二进制数能唯一表示出一个数的情况,n位二进制数能表示的最大数是( 2^n )-1,那么此时我们以10只老鼠为例:
1 0000000001
2 0000000010
3 0000000011
4 0000000100
......
1000 1111101000
从上面这1000个数字想必大家都能看出,1000个数字由完全不同的二进制码组成,那么此时,我们将这1000个瓶子从1~1000编号,同时呢给10只老鼠编号0~9 ,10个数字,从后往前(符合二进制规律更方便解释)那么将1好杯子的水给下标为0的老鼠喝,第二个杯子的水给下标为1的老鼠喝,第三个杯子 的水给下标为0和1的老鼠和,...实际上就是杯子编号对应的二进制数字哪位为1就给哪只老鼠喝,因为这是唯一的标志,所以一段时间过后,任然按照原来老鼠的序列,死了的老鼠为数字1,没死的为0,由他们组成的二进制数字代表几,那么就是第几杯水有毒。
【注意:有时候会让用杯子融合技术,给小老鼠喝,其实和上面本质一样的,竖着从1~1000,将所有从第0~9为,为1的杯子拿出来分别取出一滴按照0~9的顺序融合到杯子里,分别给0~9只老鼠喝,然后二进制计数,死了为1,否则为0,也能判断出有毒的杯子,呵上面实质同理的】