算法思考题-三只老鼠找8瓶毒药思路
问题描述:
有8瓶药,其中只有一瓶是毒药,药性很强,一滴致死,你有三只老鼠试毒,但毒药发作时间时24小时,你最短能在几天试出有毒的药呢?
提示,老鼠可以一次喝一瓶,也可以一次喝多瓶。
思路:二的三次方等于八!!!!
原因分析:
一:往往最开始会想到二分法,先将瓶子均分成两份,左边4瓶右边四瓶,第二天再分左二右二,第三天再分左一右一,这需要三天的时间!!!!
二:将瓶子两两分为一组,编为1,2,3,4 ,第一天,三只老鼠喝:1,2,3,有毒死的情况,则变成了2选一,此时还有两只老鼠,毒药在对应的两个瓶子当中,两天即可。但这是最快的情况了吗????
这些东西网上蛮多,不新鲜了,但我之前一直没搞明白,就算使用二进制,还是不知道这些药为什么那么分!
哈哈哈哈,是我不够聪明,看了几遍也没想明白,直到我把图画出来!!!!!!
解决方案:一天找到!!!
思路的核心其实先是想到 8 瓶药 而三只老鼠死亡情况的排列组合刚好也是8种情况(包含都不死)2^3 = 8
将老鼠分为ABC,那他们死亡的情况可分为以下8种:其中0代表活着,1代表死亡:
下面红线标出的是A老鼠死亡的情况,B老鼠死亡的情况以及C老鼠死亡的情况:
为什么要列出来,因为我们的关键是要知道药水怎么分配——上图:
所以,我们将瓶子编0~7号 ,按照老鼠死亡的情况对应的十进制号码分别给它们喝下对应的四瓶药。
根据死亡的情况推导出有毒的瓶子,一天即可!!!!!!!!!!!!!!!!