zoukankan      html  css  js  c++  java
  • 一道有趣的面试题,小鸟和火车的问题

    (此题不难,但是出题者要的不是答案而是推导过程,以此考验面试者的逻辑思维能力,题目部分是转载的,详细推导是我自己写的)

    这道“有趣”的面试题是:甲乙两地相距100公里,有一辆火车A以每小时15公里的速度离开甲地直奔乙地,另一辆火车B以每小时20公里的速度从乙地开往甲地。如果有一只鸟,以30公里每小时的速度和两辆火车同时启动,从甲地出发,碰到另一辆车后返回,依次在两辆火车来回飞行,直到两辆火车相遇,请问,这只小鸟往返了多少次?

    首先说这个题,我觉得出的并无任何不严谨的地方,也没有能明显让人误解的地方。按照通常的表述,显然题意是忽略鸟的转身时间,忽略鸟的身长,把鸟和火车头抽象成三个点。
    然后是解法,按照原意,鸟往返了无限多次(趟数),可以用数学归纳法证明:

    假设小鸟跑完 K 次时两车相距 m,小鸟在A火车处(R 处);
    然后小鸟再朝B火车跑,即第 k+1 次,并且与B火车相遇(Y 处),此时AB火车相距多少(XY)?
    通过这种假设可以分析出小鸟每次往返,两车新间距(衰减),进而可以反推出往返多少次(衰减到0)

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

    现在我们看示意图:

    第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时,小鸟的飞行次数将无限增大。

  • 相关阅读:
    算法笔记 --- Scale Sort
    算法笔记 --- String Rotation
    Css3动画缩放
    第一天
    SpringMVC_Controller中方法的返回值
    SpringMVC_url-pattern的写法
    SpringMVC_注释编写SpringMvc程序,RequestMapping常用属性,请求提交方式,请求携带参数
    SpringMVC_数据校验
    SpringMVC_类型转换器
    SpringMVC_异常处理的三种方式
  • 原文地址:https://www.cnblogs.com/felixnet/p/5628712.html
Copyright © 2011-2022 走看看