• 逻辑题:100层扔鸡蛋问题(扔球问题)


    题目:两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从任意层楼摔下来没事。 有座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层开始。这个题也可以问第一次应该从那一层开始扔鸡蛋可以效率最高。

    题外话,这种题如果是在面试时候出现,其实也不用太过于纠结,答不上来也没有什么问题,如果你没有遇到类似的题,是极有可能答不上来的。人的思维是发散式的,有时候一个题灵光一闪就想出来答案,有的题想半小时也不得其法,并不能证明一个人的智力水平。

  • 相关阅读:
    为了我们自己的利益,请不要去支持番茄花园。
    游戏版本比较的算法[ZZ]
    DXUT框架剖析(9)
    强制删除任意文件以及文件夹
    安全幻想曲2008
    DXUT框架剖析(12)
    DXUT框架剖析(6)
    [Ph4nt0m] [zz]The Emergence Of A Theme
    俄国农民乘法
    写在msn签名上的I'M 计划
  • 原文地址:https://www.cnblogs.com/vinter/p/12817192.html
Copyright © 2020-2023  润新知