程序員智力題:100層樓扔雞蛋,確定雞蛋摔碎的樓層N

程序員筆試智力題:建築樓有100層,若曾第N層或更高的樓層扔下來,雞蛋就會摔碎。若從第N層以下的樓層扔下雞蛋不會摔碎。給你兩個雞蛋,請找出N,並要求最差情況下扔雞蛋次數最少。

 分析:試着從10樓開始扔雞蛋,然後是20層,30層。。。。。100層

如果雞蛋1在第十層(隨便舉例子的一個數值也可以是別的數,看到後面就會知道這個值應該取14,但是剛開始分析誰也不知道該取14不是麼)扔下,雞蛋摔碎。那麼第二個雞蛋只需要從1-9層依次扔下去試就能試出來是1-10中的第幾層,所以最差在恰好在第十層才能摔碎,結果是1+9=10次

如果雞蛋1在第100層是才摔碎,實驗樓層依次是:10層、20層、30層、、、100層,試驗了10次。在第90層時雞蛋沒有摔碎,但是在100層摔碎了。這說明N在[90,100]區間內,所以雞蛋2只需要從91層樓開始試驗,最差一直試驗到99層必然會測試出N的值。最差次數:雞蛋1的次數10次 + 雞蛋2的次數9次 = 19次。

設計一種扔雞蛋的方法,使得扔雞蛋1的次數無論是第一次還是最後一次扔下的次數越穩定越好。

負載均衡方法:扔雞蛋 1的次數 和扔雞蛋2的次數的和 不論什麼時候都是一樣的,雞蛋1多扔一次雞蛋2 就少扔一次,假如開始扔雞蛋1的初始樓層是x層,那麼扔雞蛋2初始樓層是由扔雞蛋1是否摔碎決定的。即,雞蛋1摔碎的那一樓層 和 扔雞蛋1的摔碎之前扔的那一次樓層數之間的差值減1(假設雞蛋1從20層開始扔下,沒碎;從30層扔下,碎了,那麼雞蛋2 就得從21層開始扔,最差一直扔到29層就能判斷出N的值了),如果在x層扔下沒碎,那麼下一次扔的樓層就是x+x-1層(第一次是20層,下一次就是20+20-1=39層)雞蛋2的次數相應的就減去1次;第二次沒碎,下次從x+ x-1 + x-2層扔下(承接上面括號的例子:20+19+18 = 57層),依次類推.....

也就是 : x +  (x-1)+ (x-2)+。。。+1=100求一下x值   x =  14.先從14層往下扔,沒碎的前提下再從14+13=27層往下扔。最差的情況下就是第一次在14層恰好摔碎了,雞蛋2只需要從1-13層個扔一次就能判斷出N的值了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章