前两天翻译Python文档翻译到手软。今天不想翻译了,上网闲逛,在http://programming.reddit.com/ 上看到一道有趣的题目,据说是清华东门某家公司的面试题。原文地址http://classic-puzzles.blogspot.com/2006/12/google-interview-puzzle-2-egg-problem.html

两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置。可以摔碎两个鸡蛋。

下面是偶的思路。

这是一个很典型的动态规划问题。用确定minNum[n]表示鸡蛋从高n层的楼摔下不碎需要的最小次数。则有

转移方程:

minNum[n ] = min(1 + max(i – 1, minNum[n-1])) for 1<=i <= n

边界条件:

minNum[0] = 0; minNum[1] = 1

假设i是第一次扔鸡蛋的楼层,如果破了,则为了确定下面楼层中的安全位置,需要从第一层挨着试,需要i-1次,不碎的话上面还有n-i层,还剩两个鸡蛋,需要minNum[n-i]次。

Python代码如下:

#The Standard Problem in simple writing goes like this:
#
#
#* You are given 2 eggs.
#* You have access to a 100-storey building.
#* Eggs can be very hard or very fragile means it may break if dropped from the first floor or may not even break if dropped from 100 th floor.Both eggs are identical.
#* You need to figure out the highest floor of a 100-storey building an egg can be dropped without breaking.
#* Now the question is how many drops you need to make. You are allowed to break 2 eggs in the process
 
N = 100
# the element of result is a tuple
# first elem of the tuple is the mininum number needed
# second elem of the tuple is the firs position to throw the egg
results = [(0, 0), (1, 1)]
for i in range(2, N+1):
    minNum, minPos = N + 1, -1
    for j in range(1, i + 1):
        temp = 1 + max(j - 1, results[i - j][0])
        if temp < minNum:
            minNum, minPos = temp, j
    results.append((minNum, minPos))
for result in results:
    print result

偶的思路适合计算机蛮干。原作者的思路更简单。拿具体的数字作例子,假设100层楼扔16次可以搞定,那么第一次可以且最矮必须从16层扔。碎了好说,从第一层开始试,不碎的话还有15次机会,同理最矮可以从31层开始扔

每次可以扔的最矮楼层如下

16

16 + 15 = 31

31 + 14 = 45

45 + 13 = 58

58 + 12 = 70

70 + 11 = 81

81 + 10 = 91

91 + 9 = 100

超额完成目标。假设需要扔n次,则有

n + (n-1) + (n-2) + … + 1 >= 100

n (n +1) >= 200

min(n) = 14

好好的鸡蛋摔碎了多可惜,Google有钱也不能这样烧啊。打碎了搅拌均匀,加少许凉开水。一定要是凉开水,蒸了才不会有气泡,不然蒸出来和蜂窝似的,又难看又难吃。放到电饭锅蒸格上和米饭一起热。跳闸了再洒少许香葱末和香油,盖上盖子捂两分钟,美味的鸡蛋羹就出锅了。

两个鸡蛋--一道Google面试题相关推荐

  1. 经典面试题扔鸡蛋(Google面试题附带LeetCode例题)

    该题由于太过于经典,现在已经不是Google的面试题了 思路讲解 大家可能存在的疑问解答 例题:LeetCode 887 鸡蛋掉落 PS:(蓝桥杯摔手机就是根据扔鸡蛋过来的) 思路讲解 你有两个鸡蛋, ...

  2. 一道google面试题--自然数e中出现的连续的第一个10个数字组成的质数

    博客内容移到 http://www.linuxyu.com/ 此CSDN博客将不再更新,欢迎大家访问新的网站~~ Google早几年在美国很多地铁的出站口都有大幅招聘广告,它的第一题如下了:{firs ...

  3. java 自然常数e中出现的连续的第一个10个数字组成的质数,一道google面试题--自然数e中出现的连续的第一个10个数字组成的质数...

    素数判断 版本1 素数,即除1以外,只能被1和其本身整除的数.因此根据定义,最初的判断素数的方法为版本1. //judge prime //program 1 bool prime_1(int n) ...

  4. Google面试题之100层仍两个棋子

    一道Google面试题,题目如下:"有一个100层高的大厦,你手中有两个相同的玻璃围棋子.从这个大厦的某一层扔下围棋子就会碎,用你手中的这两个玻璃围棋子,找出一个最优的策略,来得知那个临界层 ...

  5. 扔玻璃球 [ Google面试题 ]

    这是一道 Google 面试题,考察的是对于 粗调 和 精调 工程思维 对于扔玻璃球国内也叫扔鸡蛋. ta不用您有什么基础,只需要一个基本工程思维. 粗调和精调,这个已是统计学里最优法,所以不用担心复 ...

  6. 【奇葩面试题】因为太难而被禁用的17道Google面试题

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/mcfnhm/article/details/80923586 即使是最成功的公司,它的招聘过程有时也 ...

  7. Google 面试题和详解

    Google的面试题在刁钻古怪方面相当出名,甚至已经有些被神化的味道.这个话题已经探讨过很多次,而科技博客 BusinessInsider这两天先是贴出15道Google面试题并一一给出了答案,其中不 ...

  8. 历史上最简单的一道Java面试题,但无人能通过

    作者:方志宏 来源:zhuanlan.zhihu.com/p/57859872 这可能是历史上最简单的一道java面试题了. 题目很简单,完成代码,判断一个整数是否是奇数: public boolea ...

  9. 17道因为太难而被禁用的Google面试题

    即使是最成功的公司,它的招聘过程有时也会很不靠谱,经常会出一些奇怪的看似没有答案的面试问题,但标准答案却让应聘者还没来得及接近「起跑线」就被「退赛」了.Google 曾经就是这样的公司,招聘人员会出一 ...

最新文章

  1. 第3章 View的事件体系
  2. 只要暴风骤雨才能使人迅速地成长
  3. 外卖(food) 洛谷4040宅男计划 三分套二分贪心
  4. 移动端重构系列6——切入切出动画
  5. 科研工作者的神器-zotero论文管理工具
  6. Linux shutdown指令
  7. php 云计算 源码,蜂巢平台基于PHP5.3云计算应用框架 v0.4.0.1
  8. 坐地铁可以刷学生卡吗_在沈阳办的公交卡能刷地铁吗?是学生卡,卡上写的是盛京通...
  9. 从头学Qt Quick(3)-- 用QML写一个简单的颜色选择器
  10. 如何使用纯CSS3来生成家谱(family tree)
  11. Redhat终端中文乱码解决
  12. C++ 把引用作为函数参数
  13. 全市场等权中位数_市场指数估值周报20200406
  14. linux so 加壳,[android] 从加壳的so文件中抽出symbols
  15. AB PLC 1769模拟量模块量程转换
  16. 计算机专业总人数所占比例公式,excel统计数据所占比例的教程详解
  17. ccs用C语言进行printf时,PIC单片机CCS之C语言(#FUSES的用法)
  18. 零基础学电路(一):白噪声电子催眠器电子温度计
  19. MySQL---查看数据表结构
  20. 2006年日语一级听力原文

热门文章

  1. unity2018转微信小游戏不显示图片
  2. 教师语言表达-语言互动
  3. 500台机以上大型网吧设计方案
  4. 深信服VMP 内存分配一点看法
  5. 德州扑克算法幕后研发者CMU博士Brown专访:AI如何打败顶级人类牌手?
  6. ACM2023SWJTU寒假选拔赛2不完全题解
  7. 免费在线证件照制作-超级好用
  8. 打印符号三角形问题java_回溯法之符号三角形问题
  9. virtualBox实现windows和Ubuntu之间的复制粘贴
  10. 分布式系统关注点——如何去实施「负载均衡」? 1