[math]不一样的猜数字(伪2分查找)

题目描述:

  给定一个在1-100之间的数字要你猜,规则是如果你猜的数比给定的数小,那么会提醒你一下,如果你猜大了,那么以后都不给予提醒,直到你猜对那个数字。比如说,给定的数字是56,你猜50的时候,提醒你小了,你猜75的时候就不再提醒,直到你猜56。问:至少需要多少次猜可以保证猜到那个数字,按照这种方法,第一个猜的数字是多少。


题目分析:

  首先我们第一想法是二分查找,但是很明显,二分查找的方法是不行的。那么我们第一个猜的数应该要比较小,这样就算给定的数比较小也会在剩下的比较小的区间里面搜索。要保证找到那个数,那么我们最好能确定大部分的数都是在同一个次数的。假设第一次猜的数n就比给定的数大了,那么[1,n-1]区间的数都要猜n次才能保证可以猜到。如果第一次猜n小了,第二次猜的m大了;那么[n+1,m-1]区间的数都要猜m - n次,直到最后区间剩一个数。不难想象,当m = 2n - 1的时候可以保证猜的次数最少,也就是每次猜的区间减1.


题目答案:

1 + 2 + 3 + ……+n - 1 < 100 < 1 + 2 + 3 +……+n

求n,可以得到n是14,也就是至少要猜14次,猜的顺序是14,27,39,50,60,69,77,84,90,95,98,99.

以上是自己的解法,如果有大神觉得错了,请指正,并告诉我正确答案。

转载请注明出处:http://www.cnblogs.com/chruny/p/4796445.html

posted @ 2015-09-10 00:26  Ry_Chen  阅读(257)  评论(0)    收藏  举报