素材牛VIP会员
好多公司经常面的一道智力题,加分的
 青***8  分类:Html5  人气:1416  回帖:13  发布于6年前 收藏

一幢 200 层的大楼,给你两个鸡蛋。如果在第 n 层扔下鸡蛋,鸡蛋不碎,那么从第 n-1 层扔鸡蛋,都不碎。这两只鸡蛋一模一样,不碎的话可以扔无数次。最高从哪层楼扔下时鸡蛋不会碎?

 标签:html5javascript

讨论这个帖子(13)垃圾回帖将一律封号处理……

Lv1 新人
记***香 站长 6年前#1

感觉这个问题没描述清楚

Lv5 码农
疯***斯 职业无 6年前#2

明确变量,稍微地整理一下问题和最高票答案。
在一幢200层的大楼上给你两个鸡蛋。
如果鸡蛋在a层时扔下不碎,那么他从1到a-1都不会碎。
求最少需要扔多少次才能确认a的最大值?

解:
假设需要扔n次可以确认a的最大值,两个鸡蛋分别为鸡蛋A和鸡蛋B。
下面开始推导:
1)、如果第一次从n层扔下A鸡蛋并且A碎了,那么剩下的B鸡蛋只能从1开始往n-1试,试n-1次
2)、如果A鸡蛋没碎,那么剩余可以尝试的次数是n-1次,所以第二次扔的楼层是n+n-1层,如果碎了,就从n+1层到n+n-1层之间进行尝试
3)、如果A鸡蛋依然没碎,第三次从n+n-1+n-2层开始扔...

直到n次扔完,但是n层扔完的楼层总数不能超过200,由此可得:
n+(n-1)+(n-2)+···+3+2+1 >= 200

(1+n) n / 2 >= 200

n取最小整数解为20.

所以从第20层开始扔,能最快找到n的最大值。

Lv 牛魔王
素材牛 PHP开发工程师 6年前#3

我看了一个动态规划解决的方法,还不错
http://blog.csdn.net/joylnwan...
策略概括来说是:当我们想要解决一个2颗鸡蛋的问题,我们会想先把一个颗鸡蛋在n/2的位置扔出去。如果碎了,那我们只剩下一颗鸡蛋,只能从第一层开始一层一层向上扔。如果没碎,在3n/4的位置扔出去。类似于2分查找的样子。复杂度大概是O(n/2).
我们可以将这样的问题简记为W(n,k),其中n代表可用于测试的鸡蛋数,k代表被测试的楼层数。对于问题W(2,36)我们可以如此考虑,将第1颗鸡蛋,在第i层扔下(i可以为1~k的任意值),如果碎了,则我们需要用第2颗鸡蛋,解决从第1层到第i-1层楼的子问题W(1,i-1),如果这颗鸡蛋没碎,则我们需要用这两颗鸡蛋,解决从i+1层到第36层的子问题W(2,36-i),解决这两个问题,可以分别得到一个尝试次数p,q,我们取这两个次数中的较大者(假设是p),与第1次在i层执行测试的这1次相加,则p+1就是第一次将鸡蛋仍在i层来解决W(2,36)所需的最少测试次数次数ti。对于36层楼的问题,第一次,我们可以把鸡蛋仍在36层中的任何一层,所以可以得到36中解决方案的测试次数T{t1,t2,t3,……,t36},在这些结果中,我们选取最小的ti,使得对于集合T中任意的值tj(1<=j<=36,j!=i),都有ti<=tj,则ti就是这个问题的答案。用公式来描述就是
W(n, k) = 1 + min{max(W(n -1, x -1), W(n, k - x))}, x in {2, 3, ……,k},其中x是第一次的测试的楼层位置。

上一页12下一页
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取