zoukankan      html  css  js  c++  java
  • 面试题:火车运煤问题

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

    你是山西的一个煤老板,你在矿区开采了有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
  • 相关阅读:
    24. Swap Nodes in Pairs
    2. Add Two Numbers
    【设计模式】结构型模式
    【设计模式】创建型模式
    【设计模式】初识
    【自考总结】走过的弯路,都是你成长的旅途
    【VMware vSphere】再谈VMware vSphere
    评估网站性能的专业术语
    C/S与B/S之辩
    【VMware vSphere】Veeam备份
  • 原文地址:https://www.cnblogs.com/cingchen/p/4389219.html
Copyright © 2011-2022 走看看