面试题:火车运煤问题

同事今天看到个面试题,感觉挺有意思的,分享下~

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

 

-------------------------------------------分割线----------------------------------- 

初看题目,运过去1000到目的地就消耗1000吨煤,看似无解,但是后面的路不是满载的1000吨煤,因此肯定得要往返才行,刚开始的思路也挺容易想到,500吨煤

1000吨煤剩一半,500吨煤放到A处,得出距出发点250米(来回要消耗500吨煤),3趟下来煤都到A处,此时共有煤500+500+750=1750吨煤,此时距离集市还有750米,同样的思路,再送到B处250米,此时的煤剩500+500=1000吨煤,再送往集市时就是500吨煤···

 

但是这么想有个问题,A到B处不是有一半不是满载,该结果肯定不是最优的,此时,仔细想一想每一次该运的距离才是关键!

将上面的过程进行分析,3000吨煤要放到A处,肯定得来回3趟才能搬完,即要走5个原点到A的距离(设为x),A到B得走3趟,设期间距离为Y,B直接到集市,即1000-x-y

x的距离如果太短,那么肯定是不止5x的

但是这么想有个问题,A到B处不是有一半不是满载,该结果肯定不是最优的,此时,仔细想一想每一次该运的距离才是关键! 将上面的过程进行分析,3000吨煤要放到A处,肯定得来回3趟才能搬完,即要走5个原点到A的距离(设为x),A到B得走3趟,设期间距离为Y,B直接到集市,即1000-x-y x的距离如果太短(如X=100,到A处还有2500吨煤,那么A到B还是有要走5次的距离),那么A到B就可能不止3次,x的距离太长,会导致剩下的煤太少(如500米就来回没有煤了),因此要找个临界点,令A到B刚好是三次,即5x=1000,同理,3y=1000,解得x=200,y=333.3,最后B到集市还有1000-x-y公里,此时还有1000吨煤,因此运到集市还有1000-(1000-x-y)=x+y=533.3
posted @ 2015-04-03 09:53  凌晨灵修  Views(1256)  Comments(0Edit  收藏  举报