题目:两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从任意层楼摔下来没事。 有座100层的建筑(也可能是其他层数),要你用这两个鸡蛋确定最少尝试多少次,可以找出鸡蛋碎裂的最低层。
解法:首先我们确定一个问题,只有两枚鸡蛋,如果第一枚碎掉了,其余的楼层我们只能一层一层的试。所以这个题和二分法是不一样的,二分法是你鸡蛋量足够。
所以在这里,鸡蛋如果碎了,由于其余的楼层我们只能一层一层的试,所以这种情况下,尝试得次数和层数必然一样。如果鸡蛋没有碎裂,那么我们要在接下来的楼层里再重复这个问题。
因为每次选择的层数和次数是关联的,所以我们可以不去选择一个层数(因为层数是无关联的,但是次数是每次选择都少了一次),而是抽象出一个次数,对次数进行求解。 我们引入一个变量k,他表示我们扔鸡蛋的次数。
如果第一次扔碎了,我们就必须一层一层试,假设我们从f层开始扔,则f一定是等于k的。否则一旦碎了你要从一层开始一层一层的尝试,还需要f-1次,如果f不等于k,扔的次数就不是k了。 如果没有碎,我们就可以选择下一次扔的楼层,这时候我们还有k-1次机会。所以我们从k+k-1层开始扔,才能保证尝试的次数为k。如果还是没有碎再下一次从k+(k-1)+(k-2)层开始扔。直到层数超过或者等于100层,我们就可以确定鸡蛋是在哪一层碎掉的了。
那么就有如下:
k+(k-1)+(k-2)+···+1 >=100
按照公式来计算为
((1+k)*k)/2 >= 100 其中k为正整数
求解:k =14
那么一共只需要14次就可以知道鸡蛋在哪一层碎裂。那么如果想尝试次数最少,第一次也就必须从14层开始。这个题也可以问第一次应该从那一层开始扔鸡蛋可以效率最高。
题外话,这种题如果是在面试时候出现,其实也不用太过于纠结,答不上来也没有什么问题,如果你没有遇到类似的题,是极有可能答不上来的。人的思维是发散式的,有时候一个题灵光一闪就想出来答案,有的题想半小时也不得其法,并不能证明一个人的智力水平。