吴昊品游戏核心算法 Round 7(特刊)—— 猜数字系列AI第一弹(二分思想)(HDOJ 2178)

 这 个AI比较地弱智,不过,作为吴昊品游戏核心算法Round 7特刊的一系列,我还是将其加上了,毕竟,这款游戏还是非常经典的!其也分单机版和在线版两款模式,恩,其AI主要是运用了二分的思想。所谓二分,可以上 溯到中国两千年前的时期,思想乃是不断取中,然后在最短的次数的前提下得到最准确的答案。

 

  (单机版)

 

  (网络版)

 

如图所示,这两个版本各有千秋吧。关于二分搜索为什么是平均搜索次数最短的,这个可以参考相关的数据结构书籍,这里就不提出来了。Source来自HDU 2178:

  Problem Description——A有1数m,B来猜.B每猜一次,A就说"太大","太小"或"对了" 。 问B猜n次可以猜到的最大数。

  Input——第1行是整数T,表示有T组数据,下面有T行 每行一个整数n (1 ≤ n ≤ 30)

 

  Output

    撇开问题的源代码不谈,二分作为一种思想,已经深入到许多问题的场合中,一些与数据处理有关的问题,本来是O(n^2)复杂度的问题,也许一个二分之后,就可以变为O(nlogn),下面,给出带注释的源代码:

  吴昊注释:在最坏的情况下,在1到m间,你最多只要猜log2(m)+1(取整)次,所以易知==>m=2^n-1.即猜n次,你能猜到的最大的数 为2^n-1.我们也可认为,在数1到2^n-1间,我们都可以在n次内猜出来,如果大于这个数,n次内我们就哟可能猜不来了。例如1--7间,我们至少 要猜3次猜可以

 

 1 int main()  
 2 
 3 {  
 4 
 5   int t, n, m;  
 6 
 7   scanf("%d", &t);  
 8 
 9   while (t--)  
10 
11   {  
12 
13     scanf("%d", &n);  
14 
15     m = 1;  
16 
17     while (n--) m <<= 1;  
18 
19     printf("%d\n", m-1);  
20 
21   }  
22 
23   return 0;  
24 
25 }

posted on 2013-02-27 21:17  吴昊系列  阅读(344)  评论(0编辑  收藏  举报

导航