老鼠和毒药的问题

今天分享一道很有意思的问题。
 
题目:
  有1000只一模一样的瓶子,编号1-1000。其中999瓶是水,一瓶是看起来像水的毒药。只要老鼠喝下一小口毒药,一天后则死亡。现在,你有7只老鼠和一天的时间,如何检验出哪个号码瓶子里是毒药?

答案:
根据2^10=1024,所以10个老鼠可以确定1000个瓶子具体哪个瓶子有毒。

先将数据规模变小,有8只一模一样的瓶子,其中有一只瓶子是毒药。现在最少需要几只老鼠可以检验出第几瓶才是毒药?

具体实现跟3个老鼠确定8个瓶子原理一样。
          
0 0 0 = 0
0 0 1 = 1
0 1 0 = 2
0 1 1 = 3
1 0 0 = 4
1 0 1 = 5
1 1 0 = 6
1 1 1 = 7

 
分析:
我们只用3只老鼠,老鼠A、B、C。

上图表中列代表的是瓶子的数量,行代表老鼠。

看每一行的时候,编号为1表示该行对应的老鼠喝了。
举例,比如编号为3的瓶子,0 1 1,表示老鼠B和老鼠C都喝了;编号为7的表示,老鼠A、B、C都喝了。

讨论:
  1、比如结果是老鼠B、C死了,我们就可以得出011=3,即第3瓶药为毒药
  2、比如结果是老鼠A、B、C都死了,我们就可以得出111=7,即第7瓶药为毒药
  3、再比如,只有老鼠B死了,我们就可以得出010=2,即第2瓶药为毒药
  4、再比如,没有老鼠死,我们就可以得出000=0,即第0瓶药为毒药

 
结束:
通过8瓶的例子,我们直到只需要3只老鼠【 2^3=8 】即可判断出哪一瓶是毒药,那么1000瓶我们只需要10只老鼠即可判断,因为原理是一样的;

比如10只老鼠通过二进制的方式为1的时候喝了,最后是第5只和第6只老鼠死了,我们可以很快的定位到是第 0000110000 = 2^5+ 2^4 = 48为毒药;今天的这个题很有意思吧!

欢迎关注【无量测试之道】公众号,回复【领取资源】
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、

资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。

备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

 

 添加关注,让我们一起共同成长!

原文地址:https://www.cnblogs.com/Wu13241454771/p/14794126.html