腾讯猜字游戏
先說答案:猜測序列為14, 27, 39, 50, 60,69, 77, 84, 90, 95, 99,哪一次偏大了,就在該數與上一個數的區間一個個猜,最多13次一定能猜到。?
如何得到上面這個答案呢?其實這道題跟google那道100層樓丟玻璃球問題是一模一樣的,只不過換了一種說法而已。下面講講解題思路。?
剛一看到這道題,熟悉二分查找的同學肯定馬上想到要用二分查找來猜,第一個猜50,第二個猜25或者75……可是這樣有一個問題,傳統的二分查找是需要每次都知道是偏大還是偏小的,但這里一旦偏大,就再也得不到這個信息了。這就導致了在這里如果繼續使用這種類似二分查找的方法最壞情況下猜測次數分布不均勻。比如,如果猜50,偏大了,那只能把50以內的挨個猜一遍,需要50次;但如果偏小了,那再猜75,若偏大,此時只需要在(50,75)之間挨個猜一遍,共1+1+24=26次;顯然,偏大的情況越晚出現,需要的總次數越少。這就是最壞情況總猜測次數分布不均勻的體現。?
直覺告訴我們,要使得總猜測次數最少,那就讓最壞情況的猜測次數分布均勻即可。假設最多猜測k次,那么第一個猜的數字應該是k+1,因為若偏大了,則逐一把k, k-1, ……2的共k-1個數猜一遍,最壞的情況是都沒猜中,則1必定是正確結果;若偏小了,則繼續按照下面講的方式猜。
若偏小了,則第二個猜的數字x應該是什么呢?這就要使得若第二次猜偏大了的話,必定能把總共的猜測次數也控制在k次,因此第二個猜的數x跟第一個猜的數k-1之間要間隔k-1個數,因為這樣的話,即使第二個數偏大了,則逐一把x-1,x-2,……k+2的共k-2個數猜一遍,必定能得到答案。因此第二個猜的數字x為2k。
依此類推,要把100覆蓋,則可以列出不等式:(k+1) + k + (K-1) + …… + 2 + 1 >= 100,解得k >= 13(取整之后)。?
下面還有一道類同的雞蛋題:
?
總結