1000瓶水

面试遇到一个问题:1000瓶水的问题

问:1000瓶水,一个小白鼠喝一点带毒的水7天后就会死亡,呢么至少多少只小白鼠会在7天后可以检测出带毒的水。

答案:

其实就相当于2**n > 1000,求解n是多少?

比如说每个老鼠都有死或者活两种状态,因此每个老鼠可以看作一个bit,取0或者1

N个老鼠可以看作N个bit,可以表达2**N个状态(其中第i个状态代表第i个瓶子有毒)

例如:当N=2时,可以存在四种状态

0,0(一号老鼠活,二号老鼠活)

0,1(一号老鼠活,二号老鼠死)

1,0(一号老鼠死,二号老鼠活)

1,1(一号老鼠死,二号老鼠死)

具体来说,有A、B、C、D这四个瓶子,一号老鼠喝A和B,二号老鼠喝B喝C

如果0,0,说明D有毒,第0个状态代表第4个瓶子

如果0,1,说明C有毒,第1个状态代表第3个瓶子

如果1,0,说明A有毒,第2个状态代表第1个瓶子

如果1,1,说明B有毒,第4个状态代表第2个瓶子

所以2**n > 1000,n为10,也就是至少需要10个老鼠才能在7天內确认哪个有毒。

你可能感兴趣的:(算法)