一道有趣的面试题 (转)
2009-12-21 09:36
190 查看
转自:/article/4776834.html
日前在网上看到一道面试题。颇有意思,也细细的研究一番。现将该题发布于此,和各位交流一下。
某幢大楼有100层。你手里有两颗一模一样的玻璃珠。当你拿着玻璃珠在某一层往下扔的时候,一定会有两个结果,玻璃珠碎了或者没碎。这幢大楼有个临界楼层。低于它的楼层,往下扔玻璃珠,玻璃珠不会碎,等于或高于它的楼层,扔下玻璃珠,玻璃珠一定会碎。玻璃珠碎了就不能再扔。现在让你设计一种方式,使得在该方式下,最坏的情况扔的次数比其他任何方式最坏的次数都少。也就是设计一种最有效的方式。
例如:有这样一种方式,第一次选择在60层扔,若碎了,说明临界点在60层及以下楼层,这时只有一颗珠子,剩下的只能是从第一层,一层一层往上实验,最坏的情况,要实验59次,加上之前的第一次,一共60次。若没碎,则只要从61层往上试即可,最多只要试40次,加上之前一共需41次。两种情况取最多的那种。故这种方式最坏的情况要试60次。
那该如何设计方式呢?
仔细分析一下,关键是第一次的选择,假设在第N层,如果第一次扔的时候就碎了,那么第二颗珠子只能是从第1层开始一层层往上试,此时,最坏的情况为N-1次,加上第一次,则一共为N层。那如果不碎呢,第二颗珠子会从N+1层开始试吗?很显然不会,此时大楼还剩100-N层,问题就转化为100-N,2颗珠子,请设计最有效方式。
哦,等等想到什么?呵呵,我想到递归
定义一个函数F(N),表示N层楼最有效方式最坏情况的次数。
通过上面的分析,有
F(N)=Min(Max(1,1+F(N-1)),Max(2,1+F(N-2)),……,Max(N-1,1+F(1)))
F(1)=1
本面试题就是求F(100)
下面把解法的代码赋予其后,用的是VB2005
日前在网上看到一道面试题。颇有意思,也细细的研究一番。现将该题发布于此,和各位交流一下。
某幢大楼有100层。你手里有两颗一模一样的玻璃珠。当你拿着玻璃珠在某一层往下扔的时候,一定会有两个结果,玻璃珠碎了或者没碎。这幢大楼有个临界楼层。低于它的楼层,往下扔玻璃珠,玻璃珠不会碎,等于或高于它的楼层,扔下玻璃珠,玻璃珠一定会碎。玻璃珠碎了就不能再扔。现在让你设计一种方式,使得在该方式下,最坏的情况扔的次数比其他任何方式最坏的次数都少。也就是设计一种最有效的方式。
例如:有这样一种方式,第一次选择在60层扔,若碎了,说明临界点在60层及以下楼层,这时只有一颗珠子,剩下的只能是从第一层,一层一层往上实验,最坏的情况,要实验59次,加上之前的第一次,一共60次。若没碎,则只要从61层往上试即可,最多只要试40次,加上之前一共需41次。两种情况取最多的那种。故这种方式最坏的情况要试60次。
那该如何设计方式呢?
仔细分析一下,关键是第一次的选择,假设在第N层,如果第一次扔的时候就碎了,那么第二颗珠子只能是从第1层开始一层层往上试,此时,最坏的情况为N-1次,加上第一次,则一共为N层。那如果不碎呢,第二颗珠子会从N+1层开始试吗?很显然不会,此时大楼还剩100-N层,问题就转化为100-N,2颗珠子,请设计最有效方式。
哦,等等想到什么?呵呵,我想到递归
定义一个函数F(N),表示N层楼最有效方式最坏情况的次数。
通过上面的分析,有
F(N)=Min(Max(1,1+F(N-1)),Max(2,1+F(N-2)),……,Max(N-1,1+F(1)))
F(1)=1
本面试题就是求F(100)
下面把解法的代码赋予其后,用的是VB2005
1 Dim F(100) As Integer, i As Integer, j As Integer 2 Dim tC As Integer 3 F(0) = 0 4 F(1) = 1 5 6 For i = 2 To 100 7 F(i) = 100 8 For j = i To 1 Step -1 9 tC = IIf(j > 1 + F(i - j), i, 1 + F(i - j)) 10 If tC < F(i) Then F(i) = tC 11 Next 12 Next 13 14 For i = 1 To 100 15 16 Debug.Print(F(i)) 17 Next
相关文章推荐
- 一道有趣的面试算法题
- 一道有趣的逻辑面试题(数独)
- strcpy,一道有趣的面试题
- 一道简单的面试题目:输入1234输出1_2_3_4
- [转]一次有趣的Google面试经历
- 一道有趣的算法题
- 一道面试 数字转大写 java版
- 一道有趣的算法题。。。
- 一道面试题目
- 一道有趣的智力题 -- 小强试毒实验
- 一道看上去很吓人的算法题 【微软面试去100题 第四十九题】
- 一道有趣的谷歌面试题
- [置顶] 空对象动态添加属性(面试常考)返回JSON,曾经惨败的一道面试题
- 有趣的面试智力题 推荐
- 一道有趣的GOOGLE面试题——找出至少一个重复元素
- 一道面试题目引发的思考
- 程序员有趣的面试智力题
- 程序员有趣的面试智力题
- 程序员有趣的面试智力题
- 【一道有趣的Twitter技术面试题】的个人思路