找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 544|回复: 5

老鼠喝酒问题(百度面试题)

[复制链接]

205

主题

173

回帖

6925

积分

论坛元老

积分
6925
发表于 2013-6-5 11:19:45 | 显示全部楼层 |阅读模式

有1000桶酒,其中1桶有毒。而一旦吃了,毒性会在1周后发作。现在我们用小老鼠做实验,要在1周内找出那桶毒酒,

问最少需要多少老鼠,为什么?

205

主题

173

回帖

6925

积分

论坛元老

积分
6925
 楼主| 发表于 2013-6-5 11:24:28 | 显示全部楼层
这个题不需要代码,这题考逻辑思维。解决思路如下:
你把酒桶编号1~1000,然后把酒桶的编号转换成二进制表示,因为2的10次方为1024,所以1~1000可以表示成10个二进制位,1000D = 1111101000B
从第一桶酒开始:1D = 0000 0000 01B

取十只老鼠按顺序站好,当前二进制位上为1的老鼠上去喝酒,如图:
[attachment=38]

坚持一个原则,对应二进制位为1的老鼠上去喝酒。最后可以得出的结论是:没有毒的酒桶对应的二进制位上为1的老鼠喝的酒肯定不会死(排除醉死的可能),只有喝了那桶有毒的酒的对应二进制位上为1的酒的老鼠才会死掉,最后把死掉的老鼠重新排列成二进制,没死的老鼠位以0填充,把二进制转换成十进制即可。
所以最后答案是10只老鼠。

拓展:同样的道理,可以推而广之,当有1024桶酒也可以做到。大家思考下,为什么?

1

主题

3

回帖

0

积分

新手上路

积分
0
发表于 2013-6-5 13:11:12 | 显示全部楼层

回 果子 的帖子

果子:这个题不需要代码,这题考逻辑思维。解决思路如下:
你把酒桶编号1~1000,然后把酒桶的编号转换成二进制表示,因为2的10次方为1024,所以1~1000可以表示成10个二进制位,1000D = 1111101000B
从第一桶酒开始:1D = 0000 0000 01B

取十只老鼠按顺序站好,当前二进制位上为1的老鼠 .. (2013-06-05 11:24) 
果子,1024的时候是不是要留一桶,如果老鼠都没死,就说明第1024桶有毒了?

205

主题

173

回帖

6925

积分

论坛元老

积分
6925
 楼主| 发表于 2013-6-5 14:15:10 | 显示全部楼层

回 zzwdkxx 的帖子

zzwdkxx:果子,1024的时候是不是要留一桶,如果老鼠都没死,就说明第1024桶有毒了? (2013-06-05 13:11) 
那肯定了。所以1024桶酒也是可以做到的

14

主题

65

回帖

0

积分

新手上路

积分
0
发表于 2013-6-5 19:39:36 | 显示全部楼层
拍案叫绝

0

主题

12

回帖

0

积分

新手上路

积分
0
发表于 2013-6-9 13:00:17 | 显示全部楼层
先算4只酒桶的;
酒桶
1  2  3  4

老鼠1  老鼠2
----------------------------------
老鼠2喝第一桶酒

老鼠1喝第二桶酒

老鼠1,2喝第三桶酒
----------------------------------
一周后如果都不死,毒酒为第四桶酒

若仅老鼠1死,毒酒为第二桶酒

若仅老鼠2死,毒酒为第一桶酒

若2只老鼠都死,毒酒为第三桶酒
----------------------------------
同理1000只老鼠,2^10=1024,足够了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-1 15:18 , Processed in 0.140325 second(s), 21 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表