问题:1架飞机,加满油可以跑1的距离,问N架飞机最多能跑多远,要确保除了最远的飞机外,其他飞机都能安全返航?

昨天同学出了这个问题,晚上仔细想了想这个问题还挺有趣的。

首先题目的意思允许我们在不同的飞机之间交换油,也就是一家飞机可以把一部分油分给其他飞机,然后自己再继续飞或者返航

下面分两种情况来考虑

1.假设每架飞机只能加一次油,答案是:N趋向无穷大时为2

(1)首先我们证明不可能超过2

假设飞的最远的飞机A飞了2+x的距离,其中x>0

那么必然有其他飞机在半途上给A加油,并且最后一次加油的地点离出发点>=1+x ,因为A最多只能装下跑1距离的油

现在的问题是给A加油的飞机不可能飞回出发点,因为它给A加油后,自己的油不够跑1的距离,而他离出发点>=1+x。

所以我们证明了不可能超过2,我们以F1,F2,...来表示这些飞机,跑的最远的飞机是F1

(2)我们研究一下一般情况

当N=2时,我们让两架飞机一起跑到1/3这个地方,然后F2把1/3的油给F1,自己还剩下1/3,然后返航,F1这时候有1的油,继续向前跑1,总共距离是1+1/3

当N=3时,在1/4这个地方,我们让F3把油分给F1,F2,自己还剩下1/4,F1和F2满油继续向前跑,到了1/2的地方,F2给1/4的油给F1,自己还有1/2,F2返航,F1继续向前跑1的距离,总共的距离是1+1/2

当N=n时,在1/(n+1)的地方,我们让Fn把(n-1)/(n+1)的油均分给其他的n-1架飞机,然后自己返航,这是其他n-1架飞机满油继续向前飞,到了2/(n+1)的地方,Fn-1把油分给其他的n-2架飞机,然后自己还有2/(n+1)油,可以安全返航

......最终F2在(n-1)/n+1这个地方,给1/(n+1)的油给F1,然后自己刚好能顺利返航,而F1还能继续飞行1的距离,总共是1+(n-1)/(n+1)

(3)结论

所以当N趋向于无穷大的时候,F1最远能飞2的距离

2.假设每架飞机可以加多次油,答案是:N趋向无穷大是为无穷远

(1)首先每架飞机可以加多次油,所以某些飞机可以在某个区段里面来回跑来接应其他飞机,也就是说我们不用担心这些飞机飞不回来,因为我们可以让其他飞机过来接应他们。有了这个认识,可能已经觉察到F1能飞到无穷远的距离,但这个无穷远到底有多大?

(2)刚才我们从起点推导到最远距离,这次我们换种思维方式,从最远点推导到终点,我们假设最远点离出发点是D

首先看F1,F1跑到了D,那么在D-1的地方有其他飞机给它加满油,让F1继续前进,而他们自己返航。我们假设有两架飞机F2,F3在D-1这个地方给F1加了1的油,然后自己返航到D-1-x的地方刚好没有油,并且在之前的航行中这三架飞机在D-1-x的地方是满油的。

那么有1+2*2*x+1*x=3  则x=2/5

然后在D-1-x这个地方有三架飞机F4,F5,F6给F1,F2,F3加满油,然后自己返航回到D-1-x-y的地方刚好没有油,并且在之前的航行中所有的六架飞机在D-1-x-y这个地方都是满油的

那么有3+2*3*y+3*y=6  则y=2/6

一般情况下我们假设有1+2+3+..+n=(n+1)n/2架飞机在 Dn这个地方都是满油的  到了Dn-1这个地方让1+2+3+...+n-1=(n-1)n/2架飞机都是满油的而剩下的n架飞机则返航到Dn这个地方刚好没有油,这Dn-1到Dn这段距离是d那么有

(n-1)n/2+2*n*d+(n-1)n/2*d=(n+1)n/2  则d=2/(n+3)

(3)由2的推理得知,当有n(n+1)/2架飞机的时候,我们可以跑1+2/5+2/6+...+2/(n+3)的距离

并且所有的飞机都是可以返航的,因为加油次数没有限制我们可以让从起点出发的n架飞机不停的在Dn-1和Dn之间跑来接应其他飞机,同时n-1架飞机在Dn-1到Dn-2之间跑来接应其他飞机.....

我们注意到数列1+1/2+1/3+...+1/n是发散的,所以当N趋向无穷大的时候F1可以跑无穷远

1架飞机,加满油可以跑1的距离,问N架飞机最多能跑多远相关推荐

  1. 动态规划旅游问题:汽车加满油可以跑n千米,中途有若干个加油站,请用动态规划的方式求解中途加油次数最少的方案。

    算法课的课堂测试,问题大概就是这些描述. 动态规划旅游问题: 汽车加满油可以跑n千米,中途有若干个加油站,请用动态规划的方式求解中途加油次数最少的方案. 我的代码: #include<iostr ...

  2. 四辆小车,每辆车加满油可以走一公里,问怎么能让一辆小车走最远

    此类问题中心思想: 先一起走 走一段路程 s 之后,任选一辆车,把剩余的油全分给其余的车,加满 重复步骤二,直到最后一辆车没油 s的取值: s并不是随便定的,而是要符合一个条件:走完s之后,剩下的油要 ...

  3. 学计算机测试用什么电脑,电脑跑分软件哪个好?好用的电脑跑分软件盘点

    想要更加直观的了解自己的电脑,一款好用的电脑跑分软件无疑是必不可少的,毕竟其能够将测试结果用跑分的形式计算出来.那么,电脑跑分软件哪个比较好呢?下面是小编分享的好用的电脑跑分软件盘点,小伙伴们可不要错 ...

  4. 飞机大战C语言代码百度云,C语言代码实现飞机大战

    本文实例为大家分享了C语言实现简单飞机大战的具体代码,供大家参考,具体内容如下 这个游戏的功能很单一,也就是"飞机大战",哈哈哈哈.总共只有300多行代码左右,你也可以想想它会有多 ...

  5. 我闺蜜跑饿了么外卖去了,今天第一次跑

    我闺蜜跑饿了么外卖去了,今天第一次跑,看着她这样很是心疼,她过去一直生活得无忧无虑,性格大大咧咧没心没肺的.谁知道元旦前几天被网骗了几十万(借的网贷),又是单亲妈妈,身后无人可依靠,今年疫情工资锐减, ...

  6. 【Pygame实战】全新模式飞机大战:空中追逐战,讲个笑话,飞机大战是休闲手游。

    导语 三月疫情原因,很多地方都封闭式管理了! 在回家无聊的打酱油,小编今天给大伙带来了一波小游戏--全民左右飞机大战!在这个快熬 不下去的日子里,打打飞机消遣闲暇时间,也是蛮惬意的,这几天小编必须全身 ...

  7. 天天酷跑php源码_使用Java实现天天酷跑(附源码)

    首先,写一个需求文档: 一.项目名称:<天天酷跑>(RunDay) 二.功能介绍: 闯关类游戏,玩家登录后,选择进入游戏,通过键盘控制玩家的上下左右移动,来躲避 障碍物和吃金币,玩家躲避的 ...

  8. JAVA飞机移动斜着走_java复习 做一个简易的飞机游戏

    最近闲来无事复习下java基础,没有特别复杂的功能,一切从简,旨在回顾知识点!!! 游戏效果如下: 我们通过键盘控制飞机前后移动躲避炮弹,如果碰到炮弹则会爆炸,游戏结束并显示游戏坚持的时间 基本的功能 ...

  9. 用python做飞机大战打到不同部位扣分不同_python制作飞机大战需要哪些python术语...

    怎么样用Python写飞机大战游戏 为什么写出来一直都是未响应,哪里写错了吗?就算小编们没能走到最后,小编也不会心存遗憾,你有你的苦辣酸甜,小编有小编的喜怒哀乐,如果小编们不曾相遇,就没有那些美好记忆 ...

最新文章

  1. vue--为什么data属性必须是一个函数
  2. GML-SVG-VML比较
  3. Spring Boot-Spring Tool Suit + Gradle 构建第一个Spring Boot 项目02
  4. Winform开发框架之数据曲线报表
  5. 动态数组的定义和声明(c++)
  6. Flink countWindow窗口
  7. 实战:Windows Server 2008 使用WSUS实现内网计算机系统更新
  8. php 检查类,检查类是否已定义 - PHP 7 中文文档
  9. python 单链表是否有回路_第5章 第1节 链表
  10. Machine Learning——Homework2
  11. UVA 1590 IP Networks
  12. 为什么谐振时电抗为0_44kVA/44kV变频串联谐振耐压试验装置
  13. 卡巴斯基 (Kaspersky) V7.0.0.43 NCT BATE 汉化免激活特别版(附2009-12-23Key)
  14. 非科班程序员如何逆袭?
  15. N个元素中选最大最小
  16. 仙境传说 第一章之四 卢渊*梦魇过后的情缘
  17. 你还不知道钉钉服务端API全局错误码吗?
  18. 关于java爬虫手机壁纸图片网站
  19. 美团外卖【成都】技术团队,招人啦!
  20. Elixir: Enum函数总结

热门文章

  1. 支付宝公众服务是什么?
  2. 在胸口凝成一颗鲜红的朱砂印
  3. SUST-ACM-2019届暑期ACM集训热身赛(第二期)题解
  4. 保研夏令营-南大、哈工、天大、中山、北理
  5. AXI latency 理解
  6. Excel数字格式转换方法
  7. 视频教程-【吴刚】个人网站设计初级入门标准视频教程-UI
  8. CCBN 官方APP STORE隐私政策
  9. 趋势操盘法则:资深操盘手6年60倍实战选股技法
  10. 【c++程序】十六进制转换十进制