学会这个算法,告别地毯式搜索,开启你的大神成长之路

题目如下:

现有1000瓶药,其中有1瓶毒药,老鼠喝了之后1小时后才产生效果问怎样用最少的时间,和最少的老鼠找出毒药?

 哈哈,这还不简单,找1000只老鼠,每只都喂,等一个小时,看哪只老鼠不行了;

 

要不,就给我一只老鼠,喂一瓶等一个小时,直到老鼠出问题,毒药就检测出来了。

 

正经点~!

答案是1个小时,11只老鼠

        因为老鼠只有2种状态,良好/异常

      我们先吧1000瓶药用二进制编号(二进制在线转换工具  https://tool.lu/hexconvert/

顺便把二进制,各个位拆开得到右图的效果;

接下来,准备好标签和老鼠;

让老鼠喝上图右边值为1的瓶子(可以借助Excel筛选排序,现在已经做好了标注)

1).第1只喝999,997,995,993,991,.....

2).第2只喝999,998,995,994,991,.....

3).第3只喝999,998,997,996,991,.....

以此类推

再静静等待1个小时,看看哪几只老鼠,出现异常。

再通过二进制转十进制计算就知道,哪瓶是毒药了。

假如是,1,8,10号出现异常

那么就是2^0+2^7+2^9=641(表格的二进制转换时+1了,这里要-1)

算法入门的开胃菜

有兴趣的朋友可以查看冲锋哥的简介,有更为详细的资料等你。

  • 136
    点赞
  • 220
    收藏
    觉得还不错? 一键收藏
  • 67
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 67
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值