飞机加油问题,据说是微软的面试题。

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

昨天晚上在 http://community.csdn.net/Expert/topic/3638/3638447.xml?temp=.7129938

看到这道题,很有趣,试着求解一番。

关于飞机加油问题:
1.首先确定问题可以求解。
  要使所有飞机安全飞回那么,加油点之间的距离肯定不能超过1次加满油飞行的距离。
可以肯定加油点除了 1/2处不能设定外,其余各点都可以设定加油点。(理由见后面)
于是问题有解。

2.
假设飞机从按照逆时针,从东飞到西。
有n架飞机同时起飞。
地球一圈长度为f

对逆时针飞行加油点。
第k架在x[k]处返回。
y[k]是从x[k-1]处开始飞行到有飞机折回的距离
如下关系如下:
x[1]= y[1];
x[2]= x[1]+y[2];
x[3]= x[2]+y[3];
x[k]= x[k-1] + y[k];(k=1,2,3...n-1);
x[k] < 0.5f;
k的最大取值是 n-1因为 2台飞机只能一次油,3台飞机最多可以加两次油。


要保证飞机能飞最远,就是使每一架飞机在折回后不折回的飞机的油是满的。
所以有:

 0.5f - 2*y[1]          = (n-1)*y[1];
 0.5f - 2*y[2] - x[1]   = (n-2)*y[2];
 0.5f - 2*y[3] - x[2]   = (n-3)*y[3];
 0.5f - 2*y[k] - x[k-1] = (n-k)*y[k];(k=1,2,3...n-1);
 
 变形一下
 0.5f = (n-1+2)*y[1];
 0.5f = (n-2+2)*y[2] + x[1];
 0.5f = (n-3+2)*y[3] + x[2];
 0.5f = (n-k+2)*y[k] + x[k-1] ;
 (k=1,2,3...n-1);

 解出 x[k]的表达式:

x[1] = y[1] = 0.5f/(n+1) ;
x[2] = 0.5*2/(n+1);
x[3] = 0.5*3/(n+1);
....
x[k] = 0.5f*k/(n+1);

由于 x[k] 必须小于 0.5f 否则谁都不愿意开那架飞机了。
就是说 k/(n+1) 只须小于 1即可(但不能等于1),
要想使x[k]尽量远,那么就要保证 k/(n+1)尽量大。
k和n都比必须使正数。而且k最大只能取 n-1
所以k=n时,k/(n+1) = (n-1)/(n+1)
这时可知,n趋向于无穷大时,(n-1)/(n+1)  趋向于1,
(而且也可以得知 n越大k才能越大)
因此加油点可以遍布整个右半球,但是1/2点处不能到达。


对顺时针飞行加油点。
同样的思考方式。同样的结果。

同时还有结论:
根据
  y[k] = x[k] - x[k-1] = 0.5f/(n+1)
可知:
n越多,那么加油站点之间的距离就会越小(得到加油站点之间距离表达式跟次数无关的无关的结论我也很诧异)。

由前面的推论:
x[k] = 0.5f*k/(n+1);
可知最远的加油站是
x[k] = 0.5f*(n-1)/(n+1);
他也只和 n相关。
所以 x[k] 越远他需要的 飞机数量越多。

由于飞机满油能飞,0.5f所以要想达到最优化,
就要使飞机落在0.5f里面的区域的每一点都比区域外面的点的需要的飞机数要少(假定在需要比较的点设置加油站的话)
由于两边都是对称的,而且从出发点到地球的另一端点的过程种,各点(如果要设置加油站的话)需要的飞机数使递增的。
所以,我们可以轻松的推定,0.5f 均匀的分布在地球另一端点的两边。(这部分也可以用证明,时间关系,暂略)

所以只需要在两个方向安排同样数量n的飞机布置最远的加油点在离出发点 1/4 f的地方或更远一点就可以了。

问题演变成
x[k] >= 1/4 f
x[k] < 0.5f
取 k的最小整数值

x[k] 的最远点的表达式是  x[k] = 0.5f*(n-1)/(n+1);

也即
0.5f*(n-1)/(n+1) >= 1/4 f
0.5f*(n-1)/(n+1) < 0.5fn>0

求最小的 n
解之得
n >= 3
所以n得最小取值是3
也就是 需要 6架次。 但最少只需要3架飞机。

过程如下:
逆时针起飞第一次加油点在  x[1] = 1/8 f处。然后有一架飞机返回。
第二次加油在 x[2] = 1/4 f处,一架飞机返回。

在逆时针飞行的飞机飞过 0.5f 处时,顺时针派出3架飞机,(可以重用以前的飞机,如果允许的话)
第一次加油处也是 1/8 f 一架飞机飞回
第二次在1/4f 同时 逆时针飞行的飞机也到达,将油均分后每个飞机一半的油。同时飞回来。
可以抵达出发点。

飞机加油问题以及代码 F国际航空公司在世界范围有n个国际机场。第i 个国际机场到中心机场的距离为di ,i=1,…,n。从国际机场j 到国际机场i 的飞行费用为c (i , j ) s (d j d i ) 2,s 为地面加油费用。从任何国际机场飞往中心机场的飞机可以在任一国际机场加油后继续飞行。飞机加油问题要求确定从距中心机场最远的国际机场飞到中心机场的最少费用。 立即下载

相关推荐

微软面试题飞机加油问题(智商被压制的节奏,好精妙)

 智商被怒压制了,稍微想了下以为是7架飞机。看来微软的题目都得仔细推敲,如果能随便算出来那还是微软么?233333333333333333.         (1)每个飞机只有一个油箱;         (2)飞机之间可以相互加油(注意是相互,没有加油机);          (3)一箱油可供一架飞机绕地球飞半圈。那么为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需

Miracle_ma的专栏 4591

微软面试题 飞机加油

背景:一道关于飞机加油问题,已知:每个飞机只有一个油箱,飞机之间可以相互加油(注意是相互,没有加油机一箱油可供一架飞机绕地球飞半圈。问题:为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场)       1号 2号 3号 4号 1号 1       2号 1+1...

xmind 448

关于一道微软面试题的思考

  条件:1.一架飞机加满油能绕地球飞半圈。2.飞机之间可以互相加油。3.只有一个机场。问:要多少架飞机起飞才能保证一架飞机绕地球飞一圈?(所有飞机都必须安全降落,不考虑加油时间)  我想出来的解决办法:设地球周长为S,三架同时起飞,行到1/8S处,一架返航,这时候它消耗了1/4的油,还需要1/4的油返航,所以它可以给其他每个飞机加1/4的油。 这时候其他两架飞

翔宇.杨的技术仓库 962

【大厂智力题】飞机加油问题

一架飞机绕地球半圈需要一桶油,一架只能装一桶油,飞机之间可以互相加油,现在要保证一架飞机能绕地球一圈,至少需要多少驾飞机,要求其它飞机不能降落,要保证能返航,速度可以不考虑,在加油的过程可以瞬间加满油,可以返航加油

明月沉江春雾晓 7370

关于飞机绕地球飞行一圈的加油问题

已知:     每个飞机只有一个油箱,飞机之间可以相互加油,注意是相互,没有加油机,一箱油可供一架飞机绕地球飞半圈。   问题:     为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?   A:所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中

大道至简,持之以恒 2万+

微软面试题飞机加油问题】题解

一个很有意思的题目: 记录下来,提高一下思维灵活度。 已知: 每个飞机只有一个油箱, 飞机之间可以相互加油(注意是相互,没有加油机) 。一箱油可供一架飞机绕地球飞半圈。 问题: 为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场) 我们计算的结

Zidane_2014的专栏 1498

微软面试100题2010年版全部答案集锦(含下载地址)

  微软等数据结构+算法面试100题全部答案集锦作者:July、阿财。时间:二零一一年十月十三日。引言     无私分享造就开源的辉煌。     今是二零一一年十月十三日,明日14日即是本人刚好开博一周年。在一周年之际,特此分享出微软面试全部100题答案的完整版,以作为对本博客所有读者的回馈。     一年之前的10月14日,一个名叫July (头像为手冢国光)的人在一个叫csdn的论坛上开帖分享...

weixin_33726943的博客 339

重磅分享:微软面试100题2010年版全部答案完整亮相

欢迎zhangxusoftgcy我的:资源博客空间简历设置|帮助|退出 CSDN首页 资讯 论坛 博客 下载 搜索 更多 CTO俱乐部 学生大本营 培训充电 移动开发 软件研发 云计算 程序员 TUP 结构之法 算法之道 找工作中。h

zhangxusoft 2312

[面试题精选]微软试题

微软试题1、直线飞行   一架飞机载满油飞行距离为1,n架飞机最远能飞多远?就是不是兜圈没有迎头接应的情况,这问题就是n架飞机能飞多远?存在的极值问题是不要重复飞行,比如两架飞机同时给一架飞机加油同时飞回来即可认为是重复,或者换句话说就是离出发点越远在飞的飞机就越少,这个极值条件是显然的,因为n架飞机带的油是一定的,重复浪费的油就越多。比如最后肯定是只有一架飞机全程飞行,注意全程这两个字,也就

summersnowgieno的专栏 1139

微软等数据结构+算法面试100题全部答案集锦

微软面试100题2010年版全部答案集锦(含下载地址)  微软等数据结构+算法面试100题全部答案集锦 作者:July、阿财。 时间:二零一一年十月十三日。 引言 无私分享造就开源的辉煌。 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年。在一周年之际,特此分享出微软面试全部100题答案的完整版,以作为对本博客所有读者的回馈。 一年之前的10月14日,一个名叫July 

CSLDBLYDX的专栏 4646

【有趣的微软面试题】:微软18题

原地址:http://www.ipc.me/18-microsoft-iq-test.html 你让工人为你工作7天,回报是一根金条,这个金条平分成相连的7段,你必须在每天结束的时候给他们一段金条。如果只允许你两次把金条弄断,你如何给你的工人付费? 有一辆火车以每小时15公里的速度离开北京直奔广州,同时另一辆火车每小时20公里的速度从广州开往北京。如果有一只鸟,以30公里每小时的速度和两辆火车同时启

阳光心态,健康人生的博客 867

【转载】各大IT巨头面试题

本文转载自CSDN大牛的一篇博客:http://blog.csdn.net/v_july_v/article/details/6870251 作者:July、阿财时间:二零一一年十月十三日。 我能够看到此文,还要多谢陈同学!让我得以及时分享给大家 引言 无私分享造就开源的辉煌。 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年。在一周年之际...

banwan4226的博客 1693

微软面试飞机加油问题

已知: 每个飞机只有一个油箱, 飞机之间可以相互加油(注意是相互,没有加油机) 。一箱油可供一架飞机绕地球飞半圈。 问题: 为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场) 我们计算的结果:共需出动5架次飞机完成此次飞行任务。

xietingcandice的专栏 1435

微软飞机

/*********************************************************************  文件名:        micosoft.h*  文件描述:      解微软面试题*  创建人:        陈泽丹, 2006年3月26日*  版本号:        1.0*  修改记录:******************************

ice_fire_007的专栏 676

关于一道微软面试题(据称)“飞机问题”详细解答

今天上午上机课的时候,看论坛精华贴,第一名的题为“微软面试题”,遂好奇打开来看看,看到第二道题的时候,就想弄个明白,废话不多说,先发下题目:  一道关于飞机加油问题,已知:每个飞机只有一个油箱,飞机之间可以相互加油(注意是相互),没有加油机一箱油可供一架飞机绕地球飞半圈, 问题:为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?(所有飞机从同一机场起飞,而且必须安全

markching的手札 1040

007趣味——微软面试海盗分宝石+飞机加油

海盗分宝石这是一个很经典的问题,具体已经不记得是哪一年的面试题了,但是当时微软确实给出了20分钟给出答案即可获得至少年薪8万美金职位的承诺 海盗分宝石——五个海盗抢到了100颗宝石,每一颗都一样大小和价值连城。他们决定这么分:抽签决定自己的号码(1 2 3 4 5) 首先,由1号提出分配方案,然后剩下的4人进行表决,当且仅当超过半数的人同意时,按照他的分配方案进行分配,否则将被扔入大海喂鲨鱼。

xcz123321czx的专栏 1283

飞机绕地飞行一周问题

最近室友们在一块的时候偶尔聊聊一些公司的面试题,下面这道飞机绕地飞行的题目觉得比较有意思:     之前没做过类似的智力测试题,我们几个室友还讨论了好长时间,最后我们把最后的答案总结了一下,答案有6、5、7架等等,甚至还有得出没法实现题中想法的答案,相互比较了下,经过总结最终得到了正确答案。 上网核对答案发现,然来此题就是某一年微软面试题,哎,看来我们平时对此类题目训练太少了,看来以后要经常

qizhizhufu的专栏 768
上一篇: 部落纪事: 一条关于求统计分组的最大值的sql
下一篇: 毕业序言
sjjf
博客等级 码龄25年 65粉丝 30原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值