zoukankan      html  css  js  c++  java
  • 飞机绕地球环行问题

    飞机绕地球环行问题

     

    题目:

     已知每架飞机有一个油箱,飞机之间可以相互加油,一整油箱的油可以供一架飞机绕地球飞行半圈。为使至少一架飞机绕地球一圈回到飞机起飞的机场,至少需要使用几架飞机,飞行几个架次?

     所有飞机从同一飞机场起飞,而且必须安全返回机场,不允许中途降落,一架飞机起飞一次算作一架次,加油时间可以忽略。

     

     

    计算法(johnny原创):

     设飞机油箱容量为V,绕地球飞行一圈的总行程为L,初始时有三架飞机A/B/C,飞机耗油情况为2V/L (油量/行程)。

     

     设第一段三个飞机共同飞过的路程为s1.则:

     

    C可加给他人的油(考虑到自身返回):

      V – 2 * s1 * 2V/L

     该值必须大于0,解的s1 < L/4 (即在0度到90度之间)

     

    A/B总耗油:

      s1 * 2V/L * 2

     

    当“C可加给他人的油”等于“A/B总耗油量”时, C的油得到了最大程度的利用。即:

     V – 2 * S1 * 2V/L = s1 * 2V/L *2

    解得:

     s1 = L/8

    也就是说在s1 = L/8时C返回,同时将A/B两飞机消耗的油量(分别为V/4)补满即可。

     

    【现在C完成了使命,剩下了A和B。】

     

    使用同样的方法:

     

    在两架飞机分别走了L/8之后,假设两架飞机又共同飞行了s2,则:

     

    A耗油:

     s2 * 2V / L

     

    B剩油(考虑返回):

     V – (L/8 + 2 * s2) * 2V / L

     B剩油应该大于0,解得 s2 < 7/16L

    当“A耗油”与“B剩油”相等时B返回,B的油得到了最大程度的利用。即

     s2 * 2V / L = V – (L/8 + 2 * s2) * 2V / L

    解得

     s2 = L/8

     (相当于AB再共同飞行45度后B返航并将所有的剩油交给A,A油满)。

     

    这样A在已经走了45度,又走了 45度的情况下还能够再走180度,离目标还差90度。

    使用同样的方法即能实现飞机A的环球飞行。

     

    共使用三架飞机,五架次。

     

     


  • 相关阅读:
    spring-cloud服务器雪崩效应
    zookeeper集群
    Hash表的扩容(转载)
    算法时间复杂度和空间复杂度的计算
    Java 8 新特性
    jdk8 流操作
    jdk8十大特性并代码demo(转)
    hashmap实现原理2
    hashmap实现原理
    Semaphore控制同时访问的线程个数countdownlatch等待多个线程执行完本身线程再执行
  • 原文地址:https://www.cnblogs.com/johnpher/p/2570589.html
Copyright © 2011-2022 走看看