一、1000瓶毒药要至少多少只老鼠,假设每只老鼠吃了药以后,若是中毒会24小时内毒发而死,才能找出具体的哪一瓶?code
答案是至少10只,须要将药混合起来,须要喂一轮。原理
位运算,每一只老鼠均可以当作一个二进位,表明0和1,0表明老鼠没事,1表明老鼠死了时间
根据2^10=1024,因此至少10个老鼠能够肯定1000个瓶子具体哪一个瓶子有毒。co
为了更好的表达原理,将题目总体缩小为如何用3只老鼠肯定8个瓶子(2^3 = 8)。位运算
一位表示一个老鼠,0-7表示8个瓶子。例如5号瓶子,对应是101,那就是老鼠1和老鼠3都得吃,4号瓶子对应是100,也就是只让老鼠1吃。
映射关系: 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吃。
根据这个逻辑:分别将一、三、五、7号瓶子的药混起来给老鼠1吃,二、三、六、7号瓶子的药混起来给老鼠2吃,
四、五、六、7号瓶子的药混起来给老鼠3吃,哪一只老鼠死了,相应的位置就为1。
如今对某瓶未知序号的毒药,若是出现了状况是老鼠1死了、老鼠2没死、老鼠3死了,这就是101状况对应5号瓶子,那么就是101=5号瓶子有毒。
按照这个原理,10个老鼠也就能够肯定1000个瓶子了。
二、明天晚上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瓶
状况二原理就是二分法,哪一组没出事就用那一组。