1、1000瓶毒药要至少多少只老鼠,假设每只老鼠吃了药之后,如果中毒会24小时内毒发而死,才能找出具体的哪一瓶?
答案是至少10只,需要将药混合起来,需要喂一轮。
题解
位运算,每一只老鼠都可以当做一个二进位,代表0和1,0代表老鼠没事,1代表老鼠死了
根据2^10=1024,所以至少10个老鼠可以确定1000个瓶子具体哪个瓶子有毒。
为了更好的表达原理,将题目整体缩小为如何用3只老鼠确定8个瓶子(2^3 = 8)。
一位表示一个老鼠,0-7表示8个瓶子。例如5号瓶子,对应是101,那就是老鼠1和老鼠3都得吃,4号瓶子对应是100,也就是只让老鼠3吃。
映射关系:
000 = 0
001 = 1
010 = 2
011 = 3
100 = 4
101 = 5
110 = 6
111 = 7
每一位就表示一个老鼠,右侧的0-7表示8个瓶子。
例如5号瓶子,对应是101,那就是老鼠1和老鼠3都得吃;4号瓶子对应是100,也就是只让老鼠3吃。
根据这个逻辑:分别将1、3、5、7号瓶子的药混起来给老鼠1吃,2、3、6、7号瓶子的药混起来给老鼠2吃,
4、5、6、7号瓶子的药混起来给老鼠3吃,哪一只老鼠死了,相应的位置就为1。
现在对某瓶未知序号的毒药,如果出现了情况是老鼠1死了、老鼠2没死、老鼠3死了,这就是101情况对应5号瓶子,那么就是101=5号瓶子有毒。
按照这个原理,10个老鼠也就可以确定1000个瓶子了。
2、明天晚上21:00的宴会需要9瓶酒,酒窖里现有17瓶酒,其中有一瓶混入了慢性毒药,只对人和老鼠有影响,吃了以后,无药可医,但需且仅需24小时发作。现在是晚上19:00,请问至少需要多少只老鼠才能选出宴会用的酒?
题解
晚上19点到第二晚21点,还有26小时时间,24小时毒发可以允许还有两个小时可操作,即所有操作要在今晚21点前完成:
情况一:严格24小时准时毒发而死
一只老鼠,每隔几分钟就按顺序吃一瓶酒,那到了明天晚上19点开始观察老鼠的死亡时间,就能反推出最初是哪一瓶酒是带毒的了。
情况二:大约24小时才会毒发而死
给17瓶酒分别从1编号到17,然后分成两组:
1组是1-9编号的酒共9瓶,
2组是10-17编号的酒外加上从1-9编号中的任意一瓶酒,共9瓶,
则共需要两只老鼠试喝2组中的酒,
则可能发生的结果为:
-
喝1组酒的老鼠死亡,则宴会用2组的9瓶酒
-
喝2组酒的老鼠死亡,则宴会用1组的9瓶酒
-
2只老鼠都死亡,则说明从1-9中拿出的那瓶酒是毒酒,则宴会使用剩余16瓶中的任意9瓶
情况二原理就是二分法,哪一组没出事就用那一组。