一道有趣的腾讯的面试题

今天在blog里见到一道有趣的面试题,记录下来,分享一下。

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

标准的解题方法:
把狗从0-9编号;
把药水按1-1000编号;
把药水编号按二进制,如果第i位(因为最大1000,所以bit位为0-9)bit位为1,则分给编号为i的狗狗喝;
最后得一二进制数,如果编号为i的狗狗死了,该数的第i bit位为1,该数就是有毒的药水编号。
他说的比较专业,下面我用实例给解析一下:
用 0、1、2、3、4、5、6、7、8、9 给小狗编号;
而药水按1-1000编号;
我们把每瓶药水的编号转换为二进制数,由于2的10次方=1024,所以我们将二进制数定为有10个数位,如:
    1=0000000001
    17=0000010001
    215=0011010111
对二进制转换不熟悉的朋友可以用“开始-程序-附件-计算器-查看-科学型”来轻松转换。
这样转换以后,每个药水编号的二进制数的每一位都分别对应一只小狗;
我们定义每瓶药水要喂给其二进制编号位数为“1”的那位对应的小狗喝;
由于2的10次方=1024>1000,所以这些二进制编号组合都是唯一的;
当我们用不到4小时的时间将1000瓶药水分别喂给相应的小狗喝后,就可以去看看书,上上网,听听歌来打发剩下的20小时;
20小时候,在一个合理的药效发作时间后,我们统计有中毒症状小狗的编号,中毒的定为“1”,正常的定为“0”;
然后依照编号顺序排列,我们就可以得到一个10位的二进制数,而将这个二进制数再转换为十进制数后,这个数值就是有毒的药水的编号了;

例如,最终结果是编号为 1、4、7、8、9 的小狗有中毒症状,我们就将一个十位二进制数的1、4、7、8、9位设为“1”,
其余各位设为“0”,即:0100100111;
而0100100111对应的十进制数=295,所以第295瓶药水就是有毒药水!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值