由火车运煤问题想到的
2011-04-22 23:53 wormsun 阅读(336) 评论(0) 收藏 举报本文版权所有,转载请注明出处和作者联系方式。
作者:孙华明
联系方式: wormsun at gmail.com
今天在酷壳网站上看到一道面试题——火车运煤问题,如下:
你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大——每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?
乍看无解,其实题目暗含个条件:煤可以在半路卸下来。
换个思维来思考该题目:在条件不变的情况下,如果运输距离不受限制在矿区到市场之间,那么火车的最大运输距离是多少?假定为S,由于火车跑一公里需要一吨煤,所以(S-1000)就是题目的答案。
那么火车的运输距离如何才能最大呢,当然是火车运输单位公里时平均燃烧的煤越少,火车的运输距离越大,也就是说火车运输距离与燃烧煤吨数之间的比值越大,火车的运输距离越大。
从最简单的情况开始分析,矿区只有1000吨煤时,运输距离与燃烧煤吨数的比值为:1000/1000 = 1,火车的最大运输距离是1000公里。
矿区有2000吨煤时,由于火车最多只能装1000吨煤,所以有1000吨煤需要火车往返1次运输,假设往返运输的距离为S1,火车往返运输时,运输距离与燃烧煤吨数的比值为:S1 / 3S1 = 1/3
这样有1000吨煤需要往返1次运输,运输距离与燃烧煤吨数的比值为1/3,1000吨煤直接运输,火车最大运输距离为:1000 + 1000 * 1 / 3公里.
矿区有3000吨煤时,有1000吨煤需要往返2次运输,运输距离与燃烧煤吨数的比值为1/5,1000吨煤需要往返1次运输,运输距离与燃烧煤吨数的比值为1/3,1000吨煤直接运输,火车最大运输距离为:1000 + 1000 * 1 /3 + 1000 * 1 /5 = 1533.333…
所以面试题的答案为1533.333… – 1000 = 533.333…吨。
如果继续递推下去,可以发现每增加1000吨煤,运输新增加的煤时,运输距离与燃烧煤吨数的比值会有规律的减小,如下:
1 1/3 1/5 1/7 1/9 1/11 …… 1/(2n+1)
将题目变更一下:
你是山西的一个煤老板,从你的矿区到市场有1500公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大——每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你至少需要准备多少吨煤才能将火车开到集市?
1000吨煤能够火车能够跑1000公里,2000吨煤火车能够跑1333.333…公里,3000吨煤火车能跑1533.333…公里,所以需要的煤大于2000吨,小于3000吨,假设为X吨,则:
(X - 2000) / 5 + 1000 / 3 + 1000 = 1500
X = 2833.333…吨。
浙公网安备 33010602011771号