`
microapple
  • 浏览: 15898 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

汽车加油问题的数学推导过程(用最少的汽油)(Reprint)

 
阅读更多

题目如下:

  一辆载油500升的汽车从A开往1000公里外的B,已知汽车每公里耗油量为1升,A处有无穷多的油,其他任何地点都没有油,但该车可以在任何地点存放油以备中转,问从A到B最少需要多少油。

  

       这个题想了好多天也没想出来,在网上找答案也都是基本相同的,只给出了一个结论,而没有一个详细推导过程。今天没事在家仔细的推导了一下,终于有些眉目了。记录如下:

由最少耗油的要求,先得有几个前提:

              1.汽车到达终点时油箱是空的。

              2.路上的每一个中转点都没有剩下油。 

      现在画一个数轴,代表起点到终点的路径,在这个数轴上取m个点,分别记为X(1),X(2),...,X(m)。X(i)表示第i个点到终点的距离。1号点为起点,m号点为终点。所以有X(1)=0,X(m)=1000。设汽车油箱的容量为A,由题目可知A=500。设S(i)表示在第i最少存放多少升油,那么显然S(m)=0,而我们要求的就是S(0)。再设n(i)为从第i-1点到第i点需要的往返次数(注意,一去一回代表一次往返)。好,以上就是需要定义的一些符号,下面开始推导过程: 

      从i-1点往i点运油时,最节省的情况是从i-1点出发时应该油箱装满油,然后在i点放下油后回到i-1点时油箱是空的,这时候运油的效率是最高的。所以有:

                             S(i) = A - [X(i)-X(i-1)] + {A - 2*[X(i) - X(i-1)]}*n(i)

上式中A - [X(i)-X(i-1)]是最后一次从i-1点到i点油箱中剩下的油;{A - 2*[X(i) - X(i-1)]}*n(i)表示在n(i)次往返过程中总共i点存下的油。把上式化简合并一下得到式(1):

                             S(i) = [n(i) + 1]*A - [2*n(i) + 1]*[X(i) - X(i-1)]      -----(1)

 又因为到第i点存下的油等于第i-1点存下的油减去从i-1点到i点的总损耗,而从i-1点到i点的总损耗为[2*n(i) + 1]*[X(i) - X(i-1)],所以有下式:

                             S(i) = S(i-1) - [2*n(i) + 1]*[X(i) - X(i-1)]

(1)式带入上式则可得到式(2-1):

                             S(i-1) = [n(i) + 1]*A   -----(2-1)

同理有式(2-2)

                             S(i) = [n(i+1) + 1]*A  -----(2-2)

 

(2-1)减去(2-2)得到式(3):

                             S(i-1) - S(i) = [n(i) - n(i+1)]*A      -----(3)

 

因为S(i-1) - S(i)表示的是从i-1点到i点的总损耗,而A是固定值,所以由(3)式得知,要使总损耗最小,就需要n(i) - n(i+1)最小,因为S(i-1) - S(i)必然>0,所以n(i) - n(i+1)>0,且n[i]是整数,所以就有min([n(i) - n(i+1)]) = 1。所以有式(4)

                             n(i) - n(i+1)= 1 ==> n(i) = n(i+1) + 1   -----(4)

 把式(4)代入式(2-2)就得到式(5)

                             S(i) = n(i)*A                          -----(5)

 再把式(5)代入式(1)并化简就可以得到式(6):

                             X(i) - X(i-1) = A/[2*n(i) + 1]        -----(6)

 X(i) - X(i-1)表示的相邻两点之间的距离,所以显然要达到终点的话就必须有: 

又因为n(m)=0,即从最后一个中转点到终点是不需要往返的。再由式(4)就有:n(m-1) = 1n(m-2) = 2, …,即有n(i) = m-i成立。我们从终点往起点回退,再由上式就有: 

所以求出来m=8。但是m=8时,求出来的和 约等于1010.91000大,所以不能由式(5)直接算S(0),而应该先算S(1) = (m-1)*A = (8-1)*500 = 3500升。也就是说在第一个中转点应该要存3500升油。然后再算从第0点到第1点的损耗,由前面的计算我们可以得到X(1) = 1000 – (500 + 500/3 + 500/5 + 500/7 + 500/9 + 500/11 + 500/13)  22.433米。

所以从第0点到第1点的总耗损可以由前面的总损耗公式[2*n(i) + 1]*[X(i) - X(i-1)]求出:

[2*n(1) + 1]*(22.433 - 0) = (2*7 + 1)*22.433 = 336.495

 

所以总耗油量就约为 3500 + 336.495 = 3836.495升。

Reprint from:http://blog.csdn.net/bad_sheep/article/details/5830013

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics