面试题—两个鸡蛋和百层大楼的故事

2016秋招刚刚结束,面试笔试过程中呢,元帅也遇到过很多考察智力和逻辑分支能力的面试题,今天我们就来分析一道很经典的(据说是Google面试题),也许对各位会有一些帮助,开卷有益~

分析方式以原文为主,更多的是解释一些思路的由来及数学解法。


面试题—两个鸡蛋和百层大楼的故事_第1张图片
eggs


来源:Jay13

链接:

https://www.cricode.com/3558.html

有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破, 在第N层以下的楼层落下不会摔破。给你2个鸡蛋,设计方案找出N,并且保证在最坏情况下, 最小化鸡蛋下落的次数。(假设每次摔落时,如果没有摔碎,则不会给鸡蛋带来损耗)

注意审题,分析侧重点,列出两个点,留作分析指针:

1)最坏情况

2)最小化鸡蛋下落次数

Case 0:

第一种策略类似于枚举法,我们可以从第一层楼开始扔鸡蛋,这样逐层向上检验,直到在x层鸡蛋碎了(x-1层未碎),说明x层就是鸡蛋的下坠极限楼层。

这种策略的最坏情况,即最多试验次数是100次(对于这道题我想采用最坏情况来考虑),而且此时第二个鸡蛋相当于被闲置了,所以我们尝试做一下优化,看看能不能利用被闲置的这个鸡蛋去减少最多试验次数~

【优化】这里我想到了折半这种方法,即在50楼抛下第二个鸡蛋(注意这里是有次序的)原因也是考虑如何让最多试验次数取极小值。为什么取50原文没有说清楚,我给出我的答案:

假设在第x层抛先第二个鸡蛋,那么会有两种情况,我们先考虑不破的情况,这样说明极限楼层在x之上,此时我们只能从x+1层开始逐个向上测试,最坏测试次数为100-x-1=99-x,(最坏结果为顶层为极限,-1表示测到顶层的相邻层时,无需检验顶层);我们再考虑破的情况,这说明极限楼层在x之下,同第一种情况,我们要从第1层开始依次向上抛最后一个鸡蛋去测试,最坏测试次数为x,极限层数可能为x或x-1。到这里我们分析了两种情况的最坏测试次数,简单分析一下两种情况发生的概率之后,要保证两种情况的最坏测试次数保持一致(减少方差,即99-x=x x=49.5 取49或50 最坏测试次数约为49.5次,约为50次)

Case 1:

第二种策略是将楼层按一定组距分组,原文依旧没有给出分成10组的原因,我的猜想如下:假设分成n个组,那么测试步骤就变为从每组的最上层进行测验,如果不破则跳到高一层的组进行测验,这样最坏情况是测到最高一组,最坏测试次数是n+100/n-1,取最小时,n=10,19次。但是仔细一想,最后一组没有必要测最高一层,即我们最坏只需测9+9次,即可找到极限楼层,即这种策略最坏测试次数为18次。

Case 2:

第三种策略,按道理是对第一种策略的优化和增加约束条件。假设在第y层进行测验,破的情况下,说明极限楼层在y的下层,即从第一层开始用第二个鸡蛋逐层测试,那么最坏测试次数1+y-1 = y =全部测试次数(假设为x);如果在第y层测试的时候,鸡蛋没有破,那么说明极限楼层在上面,此时考虑约束:

必须用一个鸡蛋找到极限楼层

所以我们从y之上一楼层选择y‘重复上一步骤,但要满足2+剩余测试次数 = x,所以最坏情况下,要在y相距x-2层的地方投掷鸡蛋进行测验,此楼为y+x-2+1 = y+x-1依次类推。最坏情况是:用尽最后一次测试次数时,恰好找到极限楼层,即


x最小值为14.

值得一提的是,策略一、二、三的面试给分分别是0、5、10分(10分制),各位看完之后有没有好的解法呢?

笔者微信:xiaomingyuan1995 

公众号:LittleMore_Xiao


面试题—两个鸡蛋和百层大楼的故事_第2张图片

你可能感兴趣的:(面试题—两个鸡蛋和百层大楼的故事)