小白鼠试毒 面试题

1. 1024 个瓶子,其中有一瓶是毒药其余为水,小白鼠饮用毒药后会在第二天死亡,最少需要多少只小白鼠才可以在第二天知道那瓶是毒药?

答案是10只。
已知任何一个数字都有一个唯一的二进制表示,1023的表示为11111 11111(先不考虑1024)。任何小于1023的正整数必定位数小于等于10。所以容易想到最小需要十个位,即十只小白鼠。
第1号小白鼠喝 xxxxx xxxx1的药,第2号小白鼠喝xxxxx xxx1x的药,第3号小白鼠喝 xxxxx xx1xx的药,… 第10号小白鼠喝 1xxxx xxxxx的药(x表示0/1)。
举个例子,如果最后的毒药的编号是10010 11001,则容易知道死的小白鼠是1号,4号,5号,7号,10号,其他小白鼠没死。(除了1024外的毒药编号同情况)
如果最后没有小白鼠死亡,则容易想到1024号是毒药。

2. 1023 个瓶子,其中有一瓶是毒药其余为水,小白鼠饮用毒药后会在第三天死, 最少需要多少只小白鼠才可以在第四天知道那瓶是毒药?

答案是9只。
理论上9只小白鼠可以测511只。考虑时间维度为511*2+1(如果所有小白鼠第七天都没死)=1023只。将前511在第一天给小白鼠喝下,后511在第二天给小白鼠喝下。如果毒药在前511只内,则说明小白鼠只会在第三天死,如果毒药在后511只内,则说明小白鼠只会在第四天死,所以9只就可以确定。

3. 1023 个瓶子,其中有一瓶是毒药其余为水,小白鼠饮用毒药后会在第二天死, 最少需要多少只小白鼠才可以在第三天知道那瓶是毒药?

答案是9只,同上。
此时小白鼠在第二天喝药前就可以观察到,但是不影响结果。

你可能感兴趣的:(Interview,算法,面试,动态规划,数据结构,leetcode)