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根

  • 相关阅读:
    PyQt5使用http请求获取天气
    Qt获取某地的天气情况
    各种编码方式
    Qt获取天气信息并解析
    QFile读文件
    QUrl
    Android数据库升级、降级、创建(onCreate() onUpgrade() onDowngrade())的注意点
    adb命令开关蓝牙及NFC
    fragment重叠问题解决方法
    Android跨进程启动另外一个应用界面时存在的问题解决办法
  • 原文地址:https://www.cnblogs.com/zhuyeshen/p/12103499.html
Copyright © 2011-2022 走看看