面试题:兔子搬运萝卜

一只兔子旁边有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根

posted @ 2019-12-26 17:50  那些年的代码  阅读(692)  评论(0编辑  收藏  举报