一道有趣的面试题,小鸟和火车的问题
2016-06-30 01:12
453 查看
(此题不难,但是出题者要的不是答案而是推导过程,以此考验面试者的逻辑思维能力,题目部分是转载的,详细推导是我自己写的)
这道“有趣”的面试题是:甲乙两地相距100公里,有一辆火车A以每小时15公里的速度离开甲地直奔乙地,另一辆火车B以每小时20公里的速度从乙地开往甲地。如果有一只鸟,以30公里每小时的速度和两辆火车同时启动,从甲地出发,碰到另一辆车后返回,依次在两辆火车来回飞行,直到两辆火车相遇,请问,这只小鸟往返了多少次?
首先说这个题,我觉得出的并无任何不严谨的地方,也没有能明显让人误解的地方。按照通常的表述,显然题意是忽略鸟的转身时间,忽略鸟的身长,把鸟和火车头抽象成三个点。
然后是解法,按照原意,鸟往返了无限多次(趟数),可以用数学归纳法证明:
假设小鸟跑完 K 次时两车相距 m,小鸟在A火车处(R 处);
然后小鸟再朝B火车跑,即第 k+1 次,并且与B火车相遇(Y 处),此时AB火车相距多少(XY)?
通过这种假设可以分析出小鸟每次往返,两车新间距(衰减),进而可以反推出往返多少次(衰减到0)
=================================================
现在我们看示意图:
![](https://images2015.cnblogs.com/blog/130348/201606/130348-20160630004858281-3485071.png)
第k+1次小鸟与B火车相遇在 Y,两者花费的时间(t)相同,并且距离相加正好为 m,于是:
m = 30t + 20t
t = m / 50
此时AB火车间距XY应该是 m 减去 A 火车跑的距离,再减去 B 火车跑的距离,于是:
m - 15 * (m/50) - 20 * (m/50) = 3m/10
规律如下:
第 k 次时,两车相距 m;
第 k + 1 次时,两车相距 3m / 10;
第 k + 2 次时,两车相距 3(3m / 10) / 10;
第 k + 3 次时,两车相距 3(3(3m / 10) / 10) / 10;
……
第 k + n 次时,两车相距 (3 / 10)^n * m
如果 k = 0 时,m = 100,那小鸟跑的次数为 n 次时,两车相距:(3 / 10)^n * 100
这么看来,就算跑无数次,两车的间距也不可能为 0
我们还可以推导出此类问题的一个公式,设火车 A 的速度 a,火车 B 的速度 b,小鸟的速度 c,c > a 且 c > b,甲乙两地相距 m
((1 - a / (b + c) - b / (b + c))^n) * m
把此题的常数带进去,((3/10)^n) * 100,就算 n 为无限大,两车的距离都不会为0,也就是说两车间距无限接近0时,小鸟的飞行次数将无限增大。
这道“有趣”的面试题是:甲乙两地相距100公里,有一辆火车A以每小时15公里的速度离开甲地直奔乙地,另一辆火车B以每小时20公里的速度从乙地开往甲地。如果有一只鸟,以30公里每小时的速度和两辆火车同时启动,从甲地出发,碰到另一辆车后返回,依次在两辆火车来回飞行,直到两辆火车相遇,请问,这只小鸟往返了多少次?
首先说这个题,我觉得出的并无任何不严谨的地方,也没有能明显让人误解的地方。按照通常的表述,显然题意是忽略鸟的转身时间,忽略鸟的身长,把鸟和火车头抽象成三个点。
然后是解法,按照原意,鸟往返了无限多次(趟数),可以用数学归纳法证明:
假设小鸟跑完 K 次时两车相距 m,小鸟在A火车处(R 处);
然后小鸟再朝B火车跑,即第 k+1 次,并且与B火车相遇(Y 处),此时AB火车相距多少(XY)?
通过这种假设可以分析出小鸟每次往返,两车新间距(衰减),进而可以反推出往返多少次(衰减到0)
=================================================
现在我们看示意图:
![](https://images2015.cnblogs.com/blog/130348/201606/130348-20160630004858281-3485071.png)
第k+1次小鸟与B火车相遇在 Y,两者花费的时间(t)相同,并且距离相加正好为 m,于是:
m = 30t + 20t
t = m / 50
此时AB火车间距XY应该是 m 减去 A 火车跑的距离,再减去 B 火车跑的距离,于是:
m - 15 * (m/50) - 20 * (m/50) = 3m/10
规律如下:
第 k 次时,两车相距 m;
第 k + 1 次时,两车相距 3m / 10;
第 k + 2 次时,两车相距 3(3m / 10) / 10;
第 k + 3 次时,两车相距 3(3(3m / 10) / 10) / 10;
……
第 k + n 次时,两车相距 (3 / 10)^n * m
如果 k = 0 时,m = 100,那小鸟跑的次数为 n 次时,两车相距:(3 / 10)^n * 100
这么看来,就算跑无数次,两车的间距也不可能为 0
我们还可以推导出此类问题的一个公式,设火车 A 的速度 a,火车 B 的速度 b,小鸟的速度 c,c > a 且 c > b,甲乙两地相距 m
((1 - a / (b + c) - b / (b + c))^n) * m
把此题的常数带进去,((3/10)^n) * 100,就算 n 为无限大,两车的距离都不会为0,也就是说两车间距无限接近0时,小鸟的飞行次数将无限增大。
相关文章推荐
- 嘴上说要认真面试,身体却在偷懒,这样好么?
- 成为Java顶尖程序员 ,看这11本书就够了
- 成为一个优秀程序员的11条小贴士
- 黑马程序员——面向对象
- java 面试题三十三 子类父类方法执行顺序的问题
- 我是进击的码农4
- 野生程序员初长成——记北大程序设计与算法专项课程
- 一道有意思的逻辑分析题
- 剑指offer-3-面试题11:数值的整数次方(对错误的处理)
- 面试题:1,进程和线程的区别?什么时候用进程?什么时候用线程?为什么你的项目中用的是线程?为什么不用进程?如果只有进程,对你这个项目有没有影响?
- 中通服软件公司笔试面试 回忆版
- 面试
- 程序员必须掌握的6种软技能
- 每个程序员应该阅读的10本经典书籍
- 有一种生物叫做程序员。。。。
- 一个程序员的顿悟:理想的程序员只比你多了6个一点点
- Android面试(一)?(内存泄露,Activity生命周期,横竖屏切换,Activity设为窗口,安全退出Activity,)
- android 面试题
- Java基础学习(学习IT企业必读的324个JAVA面试题.pdf 整理)
- 阿里巴巴离职DBA 35岁总结的职业生涯(转)