捷信的面试失败经历
面试官:给我10瓶水,其中一瓶有毒,你可以用多少只小白鼠试出来有毒的那瓶水
题目要求,不能1只小白鼠一瓶瓶试,毒会在1小时后发作。
我:.....
心路历程:说实话之前的问题已经给我问懵了,已经要结束面试的时候,由于我个人总结的个人优缺点打动了面试官,又给我一个机会。
我想了很久,陷入了一个思维固区,就是我以为一个小白鼠一次只能喝一瓶水。实际不然(后面百度才知道的)
实际上是一道典型的二进制的组合方式的题
我先以8瓶水举例,2^3
网上都没说的一点是8瓶水实际是要-1的(单甩出一瓶,如果7瓶水的排列组合一个老鼠都没死,就是这瓶有毒)
以7瓶水为基准 三只小白鼠。
那么组合有
A/B/C
0 = 0 0 0
1 = 0 0 1
2 = 0 1 0
3 = 0 1 1
4 = 1 0 0
5 = 1 0 1
6 = 1 1 0
7 = 1 1 1
可以看出A喝:4 5 6 7
B喝:2 3 6 7
C喝:1 3 5 7
然后就是简单的逻辑了
C死 AB活 1有毒(AB都没有喝过1)
B死 AC活 2有毒(AC都没有喝过2)
BC死 A活 3有毒(只有A没有喝过3)
A死 BC活 4有毒(BC都没有喝过4)
……(这里就不一个个写了)
一直到ABC都死 7有毒
其实也能发现二进制实际代表的生死,不用这么一个个的推导
例如4=100 1代表死 0代表活 对应了上面的推导
所以答案只跟2的N次方有关系,例如有11瓶水 那么答案是4 因为:2^4=16 11>8 但11<16
最近在准备面试 有一起面试的小伙伴加我微信wjy550823795 或者扫码进入