面试题:火车运煤问题

你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大——每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?

答案:

    • 装1000吨煤,走250公里,扔下500吨煤,回矿山。
    • 装1000吨煤,走到250公里处,拿起250吨煤继续向前到500公里处,扔下500吨煤,回矿山。此时火车上还有250吨,再加上在250公里处还有250吨煤,所以,火车是可以回矿山的。
    • 装上最后1000吨煤,走到500公里处,装上那里的500吨煤,然后一直走到目的。

于是,你最多可以运送500吨煤到市场(当然,火车也回不去了,因为那矿山没有煤了)

533是应该是最优解

 

另一种分析:
分析:列车一次最多只能运1000吨煤,不难看出当剩余煤在(2000,3000]的时候至少需要运三次,在(1000,2000]的时候运两次,在(0,1000]的时候运一次。
为了减少列车往返的次数,根据上述区间所示,列车中途可设两个停靠点,且其存煤量最好为2000和1000。
计算:设第一个停靠点距起点X,第二个停靠点距起点Y,最终可运达市场煤Z
则5X=1000,3(Y-X)=1000,Z=1000-(1000-Y)=Y
解得:X=200,Z=Y=1600/3=533.33
个人认为类似这种题目并不需要很复杂的数学知识,而更多的是依赖于你的思考,能够很清楚的在脑海中理清前后之间的逻辑关系那样问题就会变得非常简单容易。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值