老鼠试药——二进制算法

转自:https://blog.csdn.net/sinat_35615296/article/details/52007676
老鼠试药
现有一千瓶药水,其中九百九十九瓶是完全一样的,只有一瓶里面是毒药,但是外观上分辨不出来。毒药给小白鼠喝了后,一星期后这只小白鼠会突然死亡,但之前一点症状也没有。现需要在一星期后找出哪瓶是毒药,问至少需要几只小白鼠?
答案
二进制问题,10只即可,10只最多可测试1024瓶药水
问题解析
瓶子编号:给每个瓶子用二进制编号,总共有1000瓶,2的10次方等于1024,只需用十位二进制就可表示所有的瓶子,每一位依次用w1、w2、…w10表示。
老鼠编号:十位二进制c1、c2、…c10分别给十只老鼠编号,
编号c1的老鼠只喝w1位上为1的药水瓶,编号c2的老鼠只喝w2位上为1的药水瓶,依次类推。最后看哪些老鼠死掉,例如c10、c8、c7、c4、c3、c1编号的老鼠死掉,那么有毒药水的编号就是10 1100 1101

简化一下:如果只有8瓶,至少需要几只老鼠???
药水瓶编号是000 001 010 011 100 101 110 111,
三位二进制w1、w2、w3
三只老鼠是c1、c2、c3,
老鼠c1、c2、c3与三位二进制w1、w2、w3一一对应
c3喝: 100 101 110 111(第三位是1的都喝)
c2喝: 010 011 110 111(第二位是1的都喝)
c1喝: 001 011 101 111(第一位是1的都喝)

通过和没死的老鼠进行排除,去掉没死的那些瓶子,就可以得出死的那只里面有毒的瓶子

最后假设c3死了,那么100是毒药
假设c3c2死了,那么110是毒药
c2c1死了,那么011是毒药,
类推,哪只老鼠死对应位上就是1,没死为0,得出的结果就是毒药瓶编号

猜你喜欢

转载自blog.csdn.net/flower_CSDN/article/details/82179295