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

这个问题比较有趣,有趣的是不是问小鸟飞行了多少距离,而是问小鸟飞行了多少次。如果是问小鸟飞行的距离,则很简单,利用时间相等即可求解,至于求往返的次数的话,似乎只能用递归来调用,我想到的递归算法如下

解答的比较仓促,有兴趣的请一起讨论下。

此部分from: http://www.cnblogs.com/beginor/archive/2009/04/27/1444844.html

----------------------------------------华丽的分割线----------------------------------------

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

首先说这个题,我觉得出的并无任何不严谨的地方,也没有能明显让人误解的地方。按照通常的表述,显然题意是忽略鸟的转身时间,忽略鸟的身长,把鸟和火车头抽象成三个点。如果非要考虑鸟的转身时间和身长,我觉得有故意曲解的嫌疑。任何一个应用问题都有隐含的忽略条件,答题者如果要求应用题表述无限精确滴水不漏,是不可能的。所以我觉得有些关于量子物理的言论就没有必要了。如果硬要钻牛角尖,还可以说火车道不是严格的直线,可以说鸟并非匀速直线运动,可以说根据相对论速度和距离、时间应该遵守洛伦兹变换而非伽利略变换。

然后是解法,按照原意,鸟往返了无限多次,可以用数学归纳法证明:

假设第k次两车相距m 小鸟在甲车处
飞到乙车时 两车相距
m-m/(20+30)*(15+20)=0.3m
再飞到甲车
0.3m-0.3m/(15+30)*(15+20)=1/15m

第k+1次往返两车距离为m/15

显然若m>0 第k+1次之后两车距离仍不为0

开始是两车相距100公里不为0  所以不论往返多少次 两车距离都不为0

本来解到这里,这个题目应该已经可以得出答案了。

但是很多朋友为了编程可实现,规定了一个距离精度,小于这个距离就认为两车相距,然后又递归或者迭代写了代码实现。但是程序员不是编码工,不是所有能实现的代码就是好的。不能只知道模拟,不考虑效率。

根据前面的证明 其实最后往返次数只是一个对数运算(注意求的是往返次数,而不是转身次数)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace bird
{
    class Program
    {
        static void Main(string[] args)
        {
            double exactDistance = 0.000000001;
            Console.WriteLine(Convert.ToInt32(Math.Ceiling(System.Math.Log(exactDistance / 1000, 1.0 / 15))));
        }
    }
}

最后关于时间无限细分的问题 其实类似很多年前就被提出并解决了:http://en.wikipedia.org/wiki/Zeno's_paradoxes

而且类似的计时制中,次数并不是一个悖论,距离才是。

所以这个问题作为面试题,是非常不错的题目,可以从不同的角度回答者的能力:

1.数学和逻辑思维基础:考察面试者是否了解类似的问题并且知道背景知识,能否独立想出解决方案

2.算法优化意识:考察面试者是否仅仅关注最表面的解决方法。二话不说直接写递归交差的程序员肯定不要

3.理解问题能力:考察面试者是否能正确理解问题,理解有偏差时,是否能主动沟通,弄清别人的真正意图。自己假设一堆条件的程序员肯定不要

4.编程语言基础:考察面试者是否能正确运用一门计算机语言。用==直接比较浮点数的程序员肯定不要

此部分from: http://www.cnblogs.com/winter-cn/archive/2009/04/30/1446636.html

今天碰到一道比较有趣的面试题,大家来探讨一下。相关推荐

  1. 一道技术美术的面试题

    一道技术美术的面试题 https://zhuanlan.zhihu.com/p/27344672 一道技术美术的面试题 王滕昊 ​ 游戏开发 话题的优秀回答者 最近看越来越多的知乎小伙伴关注TA的这个 ...

  2. python fun_一道神奇的Python面试题,你会吗?

    原标题:一道神奇的Python面试题,你会吗? 无意间,看到这么一道Python面试题:以下代码将输出什么? def testFun: temp = [lambda x : i*x for i in ...

  3. 一道经典的JavaScript面试题

    一道经典的JavaScript面试题 转载于:https://www.cnblogs.com/suoking/p/5227430.html

  4. 一道丧心病狂的java面试题

    转载自 一道丧心病狂的java面试题 无意中了解到如下题目,觉得蛮好. 题目如下: public class TestSync2 implements Runnable {int b = 100; s ...

  5. 一道内存分配的面试题后续

    昨天写的题目,在VC6.0上面测试一下 一道内存分配的面试题 结果发现一个问题,发现输出结果竟然没有问题,我很慌,如果这样的输出结果没有问题的话,那肯定是跟我们的理论对不上号的. 所以我只能继续调试 ...

  6. java 有意思面试题_一些JAVA中有趣的面试题

    这几天的JAVA培训课上,不断的唤醒自己对JAVA的理解(时间太长,大学学的快忘干净了),其中有一些很有趣的面试题,都是在抠JAVA细节(唉,我是那种见坑就往下跳的人,一做就错),下面就来分享一下: ...

  7. 转自知乎 知乎ID@方志宏 记一道简单的Java面试题

    记一道简单的Java面试题 这可能是历史上最简单的一道Java面试题 题目很简单,完成代码,判断一个整数是否是奇数 public boolean isOdd(int i) 相信相当数量的人都在已经准备 ...

  8. 分享一个有趣的学习方法,欢迎一起探讨如何提高学习兴趣作者:1-2-3 来源:博客园 发布时间:2009-03-09 16:20 阅读:2820 次 原文链接 [收藏]

    分享一个有趣的学习方法,欢迎一起探讨如何提高学习兴趣 作者:1-2-3  来源:博客园  发布时间:2009-03-09 16:20  阅读:2820 次  原文链接   [收藏]   有些人似乎天生 ...

  9. python有趣的面试题_一道3行代码的Python面试题,我懵逼了...|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时 ...

最新文章

  1. 卡波姆对皮肤的作用副作用_卡波姆在化妆品中的作用
  2. matlab 正四面体,填隙工具箱,caulking box,音标,读音,翻译,英文例句,英语词典
  3. 《IT咨询指南》读书笔记一开卷 前言
  4. A new image format for the Web
  5. 片偏移字段的值怎么算_搞懂钢丝网片计算原理,怎么算都不怕出错!
  6. 一个25岁董事长给程序员的18条忠告
  7. 中国程序员的最后归宿
  8. Redmi 9将升级双频WiFi:定义2020入门机新标准
  9. 微信小程序获取 openid
  10. 【老生谈算法】matlab遗传算法工具箱源码——遗传算法
  11. c语言ODBC连接数据库
  12. 科技文献检索(六)——检索语言
  13. 读者福利,单独赠书啦!这次的书你肯定喜欢!
  14. android卡在开机画面,请教:用迅为4412开发板开机时卡在Android静止画面
  15. 操作系统文件保护及文件共享
  16. word格式刷刷完格式后公式上凸了怎么办?
  17. python opencv2 将两张图片合并为一张
  18. must be of typexxx解决方法
  19. Android11 SystemUI启动流程源码分析(一)——SystemUIApplication的创建
  20. 微型计算机的使用寿命,PC产品的MTBF和寿命:用户怎么去选择。

热门文章

  1. 美团点评业务风控系统构建经验
  2. 卷积神经网络的网络结构——以LeNet-5为例
  3. lightgbm简易评分卡制作
  4. Debug Assert Failed 怎么办?
  5. 计网 - 流和缓冲区:缓冲区的 flip 是怎么回事?
  6. Spring-AOP 动态切面
  7. blp模型 上读下写_Java高并发编程(三):Java内存模型
  8. docker-compose.yml 启动jar 包
  9. pytest中pytest_addoption用法 动态添加命令行参数 (钩子函数)
  10. arm-linux 交叉编译后程序,ARM交叉编译下,应用程序实践