腾讯面试题(内含答案)-- 不服你来试试

1000瓶药水,其中至多有1瓶剧毒,现在给你10只小狗在24小时内通过小狗试药的方式找出哪瓶药有毒或者全部无毒(小狗服完药20小时后才能判断是否中毒)。

解题思路:

用 0、1、2、3、4、5、6、7、8、9 给小狗编号; 而药水按1-1000编号; 我们把每瓶药水的编号转换为二进制数,由于2的10次方=1024,所以我们将二进制数定为有10个数位,如: 1=0000000001 13=0000001101 214=0011010110 。 这样转换以后,每个药水编号的二进制数的每一位都分别对应一只小狗; 我们定义每瓶药水要喂给其二进制编号位数为“1”的那位对应的小狗喝; 由于2的10次方=1024>1000,所以这些二进制编号组合都是唯一的;

当我们用不到4小时的时间将1000瓶药水分别喂给相应的小狗喝后,就可以去看看书,上上网,听听歌来打发剩下的20小时; 在一个合理的药效发作时间后,我们统计有中毒症状小狗的编号,中毒的定为“1”,正常的定为“0”; 然后依照编号顺序排列,我们就可以得到一个10位的二进制数,而将这个二进制数再转换为十进制数后,这个数值就是有毒的药水的编号了; 例如,最终结果是编号为 2、4、6、7、9 的小狗有中毒症状,我们就将一个十位二进制数的2、4、6、7、9位设为“1”,其余各位设为“0”,即:0010101101; 而0010101101对应的十进制数=173,所以第173瓶药水就是有毒药水!

  • 有空多挣钱,没事多睡觉

你可能感兴趣的:(腾讯面试题(内含答案)-- 不服你来试试)