您的位置:首页 > 职场人生

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

2010-06-02 08:52 85 查看
一个有趣的算法题据说是华为面试题

要求:在50分钟以内,用程序写出下面题目的解决方案,所用语言不限,代码行数不要超过100行,允许有一点点语法错误。

题目:美国战机F-16由于战略需要,做环球航行,环球飞行的距离为S,

已知F-16的最大载油量允许其最大连续航行距离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
2、3 号机各向 1号机加 1/4 , 此时
机号: 1 号 2 号 3 号
油量: 4/4 2/4 2/4
2,3 号机可安全返航, 1 号继续前进
(4) 1号机行至C 点时,同时从A点起飞 5、6、7号机
(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 ) 1、2、3 号机从 A 点出发, 至 X 点
3 号分别向 1 、 2 号各加 1/4, 余 1/4可安全返回
此时 1、2号各有 4/4
( 2) 行至 B 点 2 号向1 号 加1/4
1号有4/4 2 号有 2/4 可安全返回
(3) 1 号行至C 点 , 4,5,6号从A点没反方向起飞
(4) 1号行至 Y 点,时, 4,5,6号机 在 Y的对称点处
5号机向4号机向加 1/4, 返回
(5) 1、4、5 在 D 处相遇,
4,5 向1 各加 1/4 均可安全返回.
所以架次可以优化为 6架次飞机
由于第二次起飞时, 2,3号均已返回,可以再次派出,
因此机场实际最少有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 ,此时1、4号各有 1/4 。
此时,从A点起飞5号接应机,至X点的对称点X' 处, 由5号机分别向1、4号机各加1/4
它们一起返回机场A。
由此可见,共需 5架次飞机即可。
......................................
上面的分析都是以油尽后返回机场,这是理论最小架次。
如果为一安全的原因,实现中可以用6架次,即在出发 护送时多派出一架 N6,
即: 1,2,3,N6 同行, 至 X与A的中点处(此时各机均有 7/8)
N6 分别向1,2,3 加 1/8 ,处自已还有 4/8 可安全返回。
如此, 3号向2、1 加油点可以越过 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人求职面试必读
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: