Google的一道面试题的推广(扔鸡蛋不破的层数,2个,3个,n个鸡蛋呢)
2014-09-08 15:07
387 查看
1题目描述
google面试题:几年前的Google的面试题在论坛炒得很火,今年又被人人网当作面试题了,题目如下:“有一个100层高的大厦,你手中有两个相同的鸡蛋。从这个大厦的某一层扔下鸡蛋就会碎,用你手中的这两个鸡蛋,找出一个最优的策略,来得知那个临界层面。”
人人网面试题:原题来自:2014人人网研发工程师内推面试题目
题目描述:
一幢 100 层的大楼,给你两个鸡蛋.如果在第 n 层扔下鸡蛋,鸡蛋不碎,那么从前 n-1 层扔鸡蛋都不碎.
这两只鸡蛋一模一样,不碎的话可以扔无数次. 已知鸡蛋在0层扔不会碎.
提出一个策略, 要保证能测出鸡蛋恰好会碎的楼层, 并使此策略在最坏情况下所扔次数最少.
2.分析解答
2个蛋的时候的解答
下面给出我的分析和解答。在此引用一下---解答Google的一道面试题---,具体分析可以链接进去看看,我直接用2个蛋的方法和结果。若有2个鸡蛋,为使最坏的情况下投蛋次数最少,必须使各种情况最坏投蛋次数都相同(设需要t次),以此为突破点,将100层楼分成n段,分段点为1------a1------a2-----a3----...---an,an=99,若取a1=t,显示若蛋在a1就碎了,那么最坏还需t-1次就能找到临界层,t-1+1=t。若在a1未碎,a2层碎了,那么为保证最坏情况投蛋次数相同,第二段需要再投t-2次(因为已经投了2次),f-2+1+1=t...以此类推。第一段段长t,第二段段长t-1,第三段段长t-2,...一直到第n段段长为1。这样才能
保证最坏情况投蛋次数最少且各种情况都相同。
t+(t-1)+(t-2)+...+1>=99(此处取99,因为题目已明确大厦某一层扔下鸡蛋,蛋会碎,若99层蛋不碎,则100层必碎);
求和得(t+1)*t/2>=99,求得t>=14.
3总结和推广(n个蛋的解答)
下面推广3个蛋,4个蛋,n个蛋呢???此时本题还是借鉴平衡树(如***L,红黑树,B树)的思想,怎样使最坏情况下的投蛋次数尽可能的均匀。最均匀的情况就是,最坏的情况下,各种最坏情况的投蛋次数都相同。当然还借鉴了B树的分层检索思想。
3个蛋其实就是多次分段的思想,和B树的思想很像。目的使各种最坏情况的投蛋次数都为t次,下面分析方法:
假设第一次分段:1------a1------a2-----a3----...---an,an=99,若在a1层蛋碎了(已经投了1次),还剩下2个蛋,在1---(a1-1)内第二次分段(利用上面的结论,为使最坏情况投蛋次数为t次,此段内2个蛋需要t-1次(因为已投了1次),那么需满足,f(t-1)=(t-1+1)*(t-1)/2>=a1-1);
同样若蛋在a1层未碎,则在a2层投一次(假设蛋碎了),那么在a1---(a2-1)内第二次分段(利用上面的结论,为使最坏情况投蛋次数相同,那么在此段内2个蛋需要t-2次(因为已投了2次),那么需满足,f(t-2)=(t-2+1)*(t-2)/2>=a2-a1..
以此内推,f(t-1)+f(t-2)+...+f(1)>=(a1-1)+(a2-a1)+..+(an-a..)=99,求最小的整数t。
因此问题转换为:f(t)=(t+1)*t/2,求最小的正整数t,使得f(t-1)+f(t-2)+...+f(1)>=99;编程很容易求得最小的t为9;即3个蛋时,最坏需要9次投弹。
当然有了3个蛋的解法,编程实现4个蛋的解法,用同样的思想递归就很容易实现了。
4
编程实现
相关文章推荐
- 两个鸡蛋--一道Google面试题
- 一道 Google 的面试题
- 白话经典算法系列之十 一道有趣的GOOGLE面试题
- 求答案 ? 一筐鸡蛋: 1个1个拿,正好拿完。 2个2个拿,还剩1个。 3个3个拿,正好拿完。 4个4个拿,还剩1个。 5个5个拿,还差1个。 6个6个拿,还剩3个。 7个7个拿,还剩4个。 8个8个
- 转载:解答Google的一道面试题
- Google面试题-高楼扔鸡蛋问题
- 【白话经典算法系列之十一】一道有趣的GOOGLE面试题 --【解法2】
- 一道Google面试题的新解法探索
- 一道比较简单的Google面试题
- WEB前端面试题 分别使用2个、3个、5个DIV画出一个大的红十字
- 解答Google的一道面试题
- 白话经典算法系列之十 一道有趣的GOOGLE面试题
- 一道有意思的Google面试题
- OpenJDK源码研究笔记(二)-Comparable和Comparator2个接口的作用和区别(一道经典的Java笔试面试题)
- 一道看到的面试题 [写一个函数,比较2个整数大小,但不是用任何比较操作符]
- 测试鸡蛋的硬度:一道关于查找的面试题
- OpenJDK源码研究笔记(二)-Comparable和Comparator2个接口的作用和区别(一道经典的Java笔试面试题)
- 一道面试题:140个google面试题
- 白话经典算法系列之十 一道有趣的GOOGLE面试题 .
- 白话经典算法系列之十 一道有趣的GOOGLE面试题