面试题:兔子搬运萝卜
一只兔子旁边有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根
梅花香自古寒来