记一次面试题:一千瓶水有一瓶毒药

题:有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一天之后死亡。
问1:是否可以在一天内找出这瓶毒药

问2:可以的话,你需要几只老鼠才能找出

前段时间一直去面试,这道题把我干懵了,我看的第一眼就懵了,要一天后才死亡,你就一天的时间,喝毒药死亡时间大于可用时间,拿头找

解题:
blog.csdn.net/qq_24263553/article/...

也就是用二进制解题
一千瓶。只用二进制数表示 也就是 2的十次方,就足够了,也就是十位
从0000000001 (第1瓶) 开始

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 6

还是没懂,他这个是怎么分的?

1周前 评论

@pndx 我贴的链接说的挺明白的了,就是个每个瓶子从1开始按二进制标号,不足十位的前面补零。然后每个二进制数的最后一位的1下标相同(从左往右)的混合为一瓶。
比如

0000000001 (第1瓶)

0000000011 (第3瓶)

0000000101 (第5瓶)等

这些都是第十位为最后1位是1的 组合成一瓶 标记为10

0000000010 (第2瓶)
0000000110 (第6瓶)等
这些都是第九位最后1位是1的 组合成一瓶 标记为9
以此类推
最后组合为十瓶,然后让十只老鼠别分去喝这十瓶水
假如
喝了标记为 7 4 2 1的老鼠挂了,这十位数的第7、4、2、1都为1,其他为0
表示为1101001000,这个二进制转为十进制就为 840,毒药就是第840瓶

喝了标记为 9 4 的老鼠挂了,这十位数的第9、4都为1,其他为0
表示为0001000010,二进制数为1000010,转十进制就是 66, 毒药就是第66瓶

1周前 评论

为什么 喝了标记为 7 4 2 1 的老鼠挂了,这十位数的第 7、4、2、1 都为 1 这一步是怎么得到的?

1周前 评论
4pmzzzzzzzzzz (楼主) 3天前

解题思路:
1.一维人的思路:1000瓶水,依次在摆放X轴的0-1000位置上,1000个老鼠去喝,哪个老鼠死了哪瓶药水有毒.
2.二维人的思路:1000瓶水,摆放在平面坐标上0<X<=32,0<Y<=32的正方形内,加上X,Y坐标,然后拿个瓶子在所有x=1的瓶子里各取1滴,再拿一个瓶子在所有x=2的瓶子里各取1滴…Y坐标同X坐标,共计32瓶,找64个老鼠来喝这64瓶水,死的那两个老鼠的就能定位有毒的瓶子.
3.三维人的思路,1000瓶水,摆放在三维空间里,标记x,y,z坐标,取30个瓶子,分别在所有x=1的瓶子各取一滴,y和Z同理,然后找30只老鼠,去喝这三十瓶水,,最后肯定有三只老鼠死去,根据死去的老鼠的坐标定位有毒的水.
4.四维人的思路:抱歉我不是思维人,我想不出来.
以上就是最节约老鼠的检测方法

3天前 评论
4pmzzzzzzzzzz (楼主) 3天前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!