zoukankan      html  css  js  c++  java
  • 面试题:兔子搬运萝卜

    一只兔子旁边有100根萝卜, 兔子想把它们搬回家, 离家50米, 一次最多能搬运50根, 每走一米吃一根, 问:兔子最多能搬运多少根萝卜回家。

    答:16根

    问题分析:

    兔子如果只取一次到家, 他是不可能再回去取剩下的,

    所以必须中途返回取, 但是中途返回取消耗的代价是直接一次弄回家的3倍,

    故思路应该是中途回去取, 然后一次性取回家。

    每次从萝卜堆背多少根呢?

    如果背的少返回的次数肯定多, 代价消耗大,

    故一次背负选择兔子能背负的最大值

     现在已经确定问题思路了:即每次选择兔子能背负的最大值50, 中途回去一次取剩下的50根, 然后一次性背回家。

    故设回去取得点为距离萝卜开始处为x

    第一次搬50根

    到x处还剩 50-x

    回去取剩下50根

    需消耗x根

    故第一次搬的50根还剩50 -2*x

    第二次搬的50根到x处会消耗x 根萝卜和第一次剩下的总共为50 - x + 50 - 2*x = 100 - 3*x 根萝卜

    而距离兔子家的距离还有50 - x 米 需消耗50 -x 根

    这样搬回家 总共剩 50 - x + 50 - 2*x - (50 - x) = 50 - 2*x  根萝卜

    50 - 2*x >= 0   (最低满足条件)

    在x米处所拥有的萝卜数量100 - 3*x   应为兔子能背的萝卜数量的最大值50, 这样消耗最少, 背回家最多,

    若超过50 则需要再次往返, 代价太大。  

    故100 - 3*x <= 50   且x点剩余萝卜需要能支撑走完到家剩余的路 故100 - 3*x >= 50 - x

    16.7 =< x <= 25

    回家剩余萝卜数为50 - 2*x 要求最大值,

    x取最小, 取整17

    这样x 处剩100 - 3*17 = 49根, 走剩下的33米, 剩50 - 2*17 = 16根

  • 相关阅读:
    【NET CORE微服务一条龙应用】第一章 网关使用与配置
    111
    test
    再来一个测试
    测试博客
    flutter 中的json解析
    关于flutter -app开发过程中的问题及解决方式总结
    使用Mybatis-plus通过自定义Sql查询只有主键为null的问题
    Centos 6中keepalived作为服务启动
    CentOS6 开放、关闭防火墙相关端口命令
  • 原文地址:https://www.cnblogs.com/zhuyeshen/p/12103499.html
Copyright © 2011-2022 走看看