白鼠试毒问题
微软有一个面试题:有1000个瓶子,其中999瓶是水,1瓶是毒药,外观气味根本无法分别。现有10只白鼠和无限多的干净试管,你怎么快速找出那瓶毒药?
这个问题相信大家在学生时期都做过相关的奥数题,现在我们再用一些思维去思考这个问题。
一、直男思维
在很多女生眼里,程序员大多是直男,直男审美、直男回答等等,那我们这次就用直男的想法回答这个白鼠问题:
1000瓶,去试出1瓶毒药,我为啥要10只白鼠?1只就够了,每瓶第一滴出来让它慢慢喝,剩下9个以人道主义精神放生,或者为了舌尖上的美食烤了吃了不香吗。
二、传统数学思想
这个问题其实拿到手我的第一思想就是二分法,就是所谓的将1000瓶分成左右两个500瓶,每瓶取一滴,混合成一瓶,喂小白鼠一滴 ,确定毒药在哪边,那还剩下9个白鼠,再依法炮制,将500瓶分成两个250,毒死一个白鼠后分成两个125,再毒死一个白鼠后分成62+62+1,再毒死一个后变成32…就这样,如果运气差的话,10只小白鼠1000瓶水刚刚好。
当然对于这个问题,其实二分法还是慢了&#x