微软经典面试题之1000瓶子中一瓶毒药

1000 个瓶子中有一瓶毒药,一只老鼠吃到毒药一周之内会死,如果要在一周之内检测出有毒药的一瓶,问至少需要几只老鼠?(并说出怎么检测)

一、

把1000瓶标号:1,2,3,4,5,6...1000. (十进制编号)

二、

所有老鼠排列在一起组成一个2进制队列: 0000000000

0代表不喝,1代表喝 

三、

0000000001代表第一瓶水被喝情况
0000000010代表第二瓶水被喝情况
0000000011代表第三瓶水被喝情况
0000000100代表第四瓶水被喝情况
...
1111101000代表第1000瓶水被喝情况

四、

第7天,喝了毒药的老鼠都死了,那个二进制队列转为为十进制就是毒药的标号。
比如第3只老鼠死亡,其他老鼠没死,队列为0000000100,第四瓶水有毒。
第1,5,6,8老鼠死亡,其他没死,队列为0010110001,第177瓶水有毒。

状态压缩 :

1000个药剂只有一个是毒药,所以有一千种状态 

而十个老鼠每个都有死和活两种可能,
所有有2^10=1024种状态>1000个。
实际上如果老鼠有更多状态则可以压缩的更多了。 

只需要把每一种状态找到一种方式对应就可以了,
最简单就是二进制编码了。

你可能感兴趣的:(微软经典面试题之1000瓶子中一瓶毒药)