面试智力题

现在很多大型IT企业在面试时都喜欢问一些智力相关的题目,虽然智力面试题在面试笔试中占的比例不大,但很多时候,面试环节中智力题往往会成为我们拿offer的最大拦路虎。因为有些面试官认为通过智力题可以考查你的思维能力、抽象问题的能力。

题目1:

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

在参考下面的解答之前,请你先仔细思考10分钟。看你给出的方案最小下落次数是多少。如果题目总分10分,看看自己能得几分。

解答1:得0分的答案

用二分法。

解答2:得5分的答案

将100层楼分成10分,每一份就是10层楼。首先,将鸡蛋从第10层楼开始扔。那么结果有两种可能:
情况1:如果碎了,说明临界楼层在1到10之间,但现在只剩下一个鸡蛋了,只能从第一层一直到第10层。
情况2:如果没有碎,接下来从第20层扔鸡蛋。
该方法的思路是,用一个鸡蛋来试探,找到临界楼层的大致范围[1~10]、[11-20]….[91-100]。然后用另一个鸡蛋在大致范围内找出精确楼层。该方法的最坏次数是:18次。

解答3:得10分的答案

假设问题存在最优解,这个最优解的最坏情况尝试次数是x次。那么,我们第一次扔鸡蛋恰恰应该选第x层。选择高一层或低一层都不合适

究竟为什么呢?下面分析一下

假设第一次扔在第x+1层:

如果第一个鸡蛋碎了,那么第二个鸡蛋只能从第1层开始一层一层扔,一直扔到第x层。

这样一来,我们总共尝试了x+1次,和假设尝试x次相悖。由此可见,第一次扔的楼层必须小于x+1层。

假设第一次扔在第x-1层:

如果第一个鸡蛋碎了,那么第二个鸡蛋只能从第1层开始一层一层扔,一直扔到第x-2层。

这样一来,我们总共尝试了x-2+1 = x-1次,虽然没有超出假设次数,但似乎有些过于保守。

假设第一次扔在第x层:

如果第一个鸡蛋碎了,那么第二个鸡蛋只能从第1层开始一层一层扔,一直扔到第x-1层。

这样一来,我们总共尝试了x-1+1 = x次,刚刚好没有超出假设次数。

因此,要想尽量楼层跨度大一些,又要保证不超过假设的尝试次数x,那么第一次扔鸡蛋的最优选择就是第x层。

如果第一次扔鸡蛋是在第x层,并且没有打碎,那么第二次扔鸡蛋是在哪一层呢?

由于第一次扔鸡蛋没有碎,尝试次数消耗一次,那么尝试次数不得超过x-1次,

尝试次数上限变成了x-1次,所以第二次尝试的楼层跨度也是x-1层,绝对楼层是x+x-1层

同理,如果鸡蛋还是没有碎,第三次楼层跨度是x-2,第四次x-3,第五次......

因此可以列出一个楼层数的方程式:

有趣的扔鸡蛋问题

x + (x-1) + (x-2) + ... + 1 = 100

这个方程式不难理解:

左边的多项式是各次扔鸡蛋的楼层跨度之和。由于假设尝试x次,所以这个多项式共有x项。

右边是总的楼层数100。

下面我们来解这个方程:

x + (x-1) + (x-2) + ... + 1 = 100 转化为

(x+1)*x/2 = 100

最终x向上取整,得到 x = 14

因此,最优解在最坏情况的尝试次数是14次,第一次扔鸡蛋的楼层也是14层。

最后,让我们把第一个鸡蛋没碎的情况下,所尝试的楼层数完整列举出来:

14,27, 39, 50, 60, 69, 77, 84, 90, 95, 99, 100

举个例子验证下:

假如鸡蛋不会碎的临界点是65层,那么第一个鸡蛋扔出的楼层是14,27,50,60,69。这时候啪的一声碎了。

第二个鸡蛋继续,从61层开始,61,62,63,64,65,66,啪的一声碎了。

因此得到不会碎的临界点65层,总尝试次数是 6 + 6 = 12 < 14 。

 

题目2:64匹马,8个赛道,最少比几次找出跑得最快的4匹马

首先我们将64匹马分成48组,占用8个跑道,进行8个组的比赛,累计8次:

这里蓝色的视为淘汰的马,因为只需要我们算出最快的四匹马;
这个时候然后取8次跑的第一名进行比赛,然后淘汰掉后四名所在的组的所有马
因为,后四名所在的组的第一名没有跑过前四名的马,所以可以直接淘汰。累计9次

这个时候还可以进行淘汰,因为D1是a1,a2,a3之后的排名,所以d2,d3,d4可以淘汰,第四名也可能出现在C2中,C2是所在组的第二名,那么C3,C4也可以淘汰了,根据这样进行分析,可以得到B4也可以淘汰了;

这个时候你就会发现最快的一匹马A1已经出来了,然后随便选出一匹马,剩余的8匹马进行比赛,决定出前三名,这三名选出来之后再和刚才选出来的那批进行比赛,选出前三名,于是决出前四名:总场数为8+1+1+1=11场;

 

题目3:七只老鼠,一百瓶药水,其中有一瓶是毒药,毒发时间为一天,使用一天时间检测出毒药

对100瓶毒药进行二进制编码,0000001,0000010,...,1100100

老鼠分别为A,B,C,D,E,F,G

A老鼠喝编码格式为1xxxxxx的药水

B老鼠喝编码格式为x1xxxxx的药水

C老鼠喝编码格式为xx1xxxx的药水

D老鼠喝编码格式为xxx1xxx的药水

E老鼠喝编码格式为xxxx1xx的药水

F老鼠喝编码格式为xxxxx1x的药水

G老鼠喝编码格式为xxxxxx1的药水

最后查看老鼠死亡情况,假如E和F死亡,说明0000110为毒药。

 

参考博客:
3.https://blog.csdn.net/star_fighting/article/details/104706155
posted @ 2020-03-24 18:42  USTC丶ZCC  阅读(378)  评论(0编辑  收藏  举报