华为面试题:环球航行,空中加油

来源:互联网 发布:淘宝店铺搜索排名规则 编辑:程序博客网 时间:2024/05/17 09:21

 个有趣的算法题据说是华为面试题

要求:在50分钟以内,用程序写出下面题目的解决方案,所用语言不限,代码行数不要超过100行,允许有一点点语法错误。   
题目:美国战机F16由于战略需要,做环球航行,环球飞行的距离为S
已知F16的最大载油量允许其最大连续航行距离1/2*S(一满箱油飞半个地球),
所有飞机只能从一个机场起飞/降落(中间无任何机场),
飞行中间只允许飞机互相加油,那么,问要让一架飞机达到全球飞行的目的,
至少要出动多少架次飞机?
 

我能找到的最佳方案是:6架次飞机.

 问题出处:

http://www.nokiamobile.org.cn/18_100212_1610845.html

 
设机场在A

没飞机油箱容量为1, 途中至少加 1箱油,可从A->B->C->D完成航行。

若加两次油

1=1/2+1/2

若加四次油

1=1/4+1/4+1/4+1/4


观察上图,可看出,对主机的最佳加油点位在B D

设编号为1号的飞机为主飞机,其它的飞机为加油机。

分析一:

       出发时 1 2 号同时起飞 至 X

       1 号 剩余 3/4      2号 剩余 3/4

      2号向1号加 1/4 , 此时

       1 号 剩余 4/4      2号 剩余 2/4

       2 号机可安全返回, 1 号机可行至 Y 点, 还需 3/4 箱油。 这样正反方向加油不对称。

      也就是说: 共3架是不可能的。

出发时 1 号机最佳加油方式为:至 B 点有满箱油。

问题转化为: 至B点如何提供 1/2 箱油

1/2 = 1/4 + 1/4 需有2架飞机 各有3/4 箱油 , 各为共提供 1/4 后可安全返回。

如何 使一架飞机至 B 点有 3/4 ? 它自身带的油至B点只有2/4 ,沿途需加 1/4

因此答案得出:

( 1 ) 1,2,3,4 号机从A 点同时出发,

( 2 ) 行至 X

       4 号机 剩余 3/4 , 2号、3号加入 1/4 , 自身余 1/4 可安全返回

        机号:                    1       2           3   

        油量:                    3/4        4/4           4/4

(3) 行至 B 点:

        机号:                    1       2           3   

        油量:                     2/4        3/4           3/4

     23 号机各向 1号机加 1/4 , 此时

       机号:                    1       2           3   

       油量:                    4/4        2/4           2/4

     23 号机可安全返航, 1 号继续前进

(4) 1号机行至C 点时,同时从A点起飞 567号机

(5) 1号机行至 y 点时

     7号机给 5,6 各加 1/4 , 7号机可安全返回

(6) 1号、5号、6号在 D 点相遇

      5,6号各向1号加 1/4

      它们均剩余 2/4 箱油,均可安全返回,且刚油尽

所以此方案 共需 出动 7架次飞机 ,均可安全返回。

算法改进:

访算法有可改进之处:

 我们选择对1号机在 B,X 点位加油

( 1 ) 123 号机从 A 点出发, X

      3 号分别向 1 2 号各加 1/4, 1/4可安全返回

      此时 12号各有 4/4

( 2) 行至 B 2 号向1 号 加1/4

     1号有4/4 2 号有 2/4 可安全返回

(3) 1 号行至C , 4,56号从A点没反方向起飞

(4) 1号行至 Y 点,时, 456号机 在 Y的对称点处

    5号机向4号机向加 1/4, 返回

(5) 145 D 处相遇,

    4,5 1 各加 1/4 均可安全返回.

所以架次可以优化为 6架次飞机

由于第二次起飞时, 23号均已返回,可以再次派出,

因此机场实际最少有4架飞机即可完成该任务。

========================================================

2010-05-30    

当我再次阅读上面的解法时,有新的想法:

1号机从A点出发时, 带了两架加油机在 X 点加了一次油, 3 号机返回了

B点时,2号机再向1号机加一次。

我们可以用对称的方法解决1号机从C点经D点返回时的接应加油机问题:

即:1号行至C 点时, 4号机从A点与1号机相向而行,至D点相遇

1号机有即将油飞,4号机有1/2箱油,4号向1号加1/4 ,此时14号各有 1/4

此时,从A点起飞5号接应机,至X点的对称点X' 处, 由5号机分别向14号机各加1/4

它们一起返回机场A

由此可见,共需 5架次飞机即可

......................................

上面的分析都是以油尽后返回机场,这是理论最小架次。

如果为一安全的原因,实现中可以用6架次,即在出发 护送时多派出一架 N6

即: 1,2,3N6 同行, XA的中点处(此时各机均有 7/8)

N6 分别向1,2,3 1/8 ,处自已还有 4/8 可安全返回。

如此, 3号向21 加油点可以越过 X 点靠近 B 点一点

2号向1加油的时间也可越过 B 点靠近 C 点一些,

如此 1号机飞至D点时尚可余一点油,4 号接应机可以在D点之右侧少许,为1号加油,

它们返回机场时都可以有一点油。而不至于到了机场没油了,没法安全降落。

于是本题的解:

最少理论架次为5,安全架次为6.

 终于为这些F-16的加油完成了设计,至于美同的机场怎么安排这些飞机的飞行,我们已经不用再去考虑了。

原贴地址:http://hi.baidu.com/jxq61/blog/item/5e2045ce37936f1c00e92833.html

延伸阅读:

《编程之美》豆瓣

《编程之美》互动网

《编程之美》,IT人求职面试必读

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 支付宝16岁限额怎么办 支付宝提不了现怎么办 支付宝余额受限需要身份证怎么办 微信被骗了6000怎么办 被代运营骗了该怎么办 淘宝店铺过节放假无人打理怎么办 淘宝店太久没打理出现未开店怎么办 淘宝店关了售后怎么办 发货运单号发错了怎么办 天猫积分为零怎么办 山东聊城小型车脱审一年怎么办? 廉租房如果夫妻离婚怎么办 淘宝客服不给退货怎么办 天猫客服打字慢怎么办 京东买的kindle坏了怎么办 欧巴怎么办韩语怎么写 聚划算淘宝口令打不开怎么办 道聚城白银礼包下架怎么办 聚星输了很多钱怎么办 弹力运动裤被烟烧了个洞怎么办 生完宝宝胯宽怎么办 黑色纯棉裤子洗的发白怎么办 金盾保险柜密码忘了怎么办 装修好的房子漏水怎么办 刚装修的房子墙面开裂怎么办 刚装修的房子有味道怎么办 代销产品规格填写不完整怎么办 我的信息被泄露怎么办 进入不良网站手机发信息怎么办 发不良信息被停机了怎么办 手机qq登录显示被冻结怎么办 qq账户被冻结了怎么办 qq钱包账户被永久冻结怎么办 怎么办转让费还没给我 收钱吗不能抵用红包怎么办 红包抵扣被关了怎么办 天猫客户给差评怎么办 淘宝闪电退款有纠纷怎么办呀 手机屏幕右下角出现彩色点怎么办 在超市买到假货怎么办 天猫超市多发货怎么办