面试题:兔子搬运萝卜

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

 

 

 

 

 

 

 

 

 

 

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值