运输萝卜问题——2019腾讯面试题

题目

有一个商人骑着一头驴去1000公里外的集市卖萝卜,商人有3000个萝卜,但是驴最多只能带1000个萝卜,而且驴每走一公里要吃掉一根萝卜,请问商人最多能卖多少根萝卜。

分析

  1. 萝卜很多
  2. 驴的负载有限

思路

思路就是,假设在一根萝卜都不浪费的情况下(没有剩下一根萝卜还留在原地),消耗一千个萝卜,最多能前进多远?

假设商人带着萝卜前进X公里,由于驴每次只能搬运1000根萝卜,那么3000根萝卜至少搬运三个来回,一共消耗5X萝卜:

  • 起点出发,带1000根萝卜,剩余2000根萝卜,走X,剩下1000-X根萝卜
  • 放下1000-2*X根萝卜,带X根萝卜回到起点,又消耗X根萝卜
  • 起点出发,带1000根萝卜,剩余1000根萝卜,走X,剩下1000-X根萝卜
  • 放下1000-2X根萝卜(现在有2000-4X根萝卜),带X根萝卜回到起点,又消耗X根萝卜
  • 起点出发,带1000根萝卜,剩余0根萝卜,走X,剩下1000-X根萝卜
  • 放下1000-X根萝卜,一共有3000-5X根萝卜

那么按照我们的思路,消耗一千根萝卜,最多走:
X = 1000 / 5 = 200公里

由于消耗了1000根萝卜,此时情况变了,剩余2000根萝卜时,想要前进Y公里,驴只需要来回两趟,一共消耗3Y根萝卜,具体推导和上面差不多,可以计算得到:
Y = 1000 / 3 = 333公里

最后只剩下1000根萝卜了,商人和驴也前进了 533公里(200 + 333),剩下467公里,走完即可。

最后商人可卖533根萝卜。

一个变态的思路

带三头驴上路,当消耗到1000根萝卜时,杀掉一头驴,此时前进距离X:
X = 1000 / 3 = 333公里
再消耗1000根萝卜时,再杀掉一头驴,此时前进距离Y:
Y = 1000 / 2 =500公里
剩下1000公里走完,剩余833根萝卜。
(题目说的是一头驴,明显偏题了)

多说一点

这是我想到的最优解,如果有更好的解法,可以探讨一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值