hdu2178猜数字(二分法!!!!)

---恢复内容开始---

猜数字

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3792    Accepted Submission(s): 2704


Problem Description
A有1数m,B来猜.B每猜一次,A就说"太大","太小"或"对了" 。
问B猜n次可以猜到的最大数。
 
Input
第1行是整数T,表示有T组数据,下面有T行
每行一个整数n (1 ≤ n ≤ 30)
 
Output
猜n次可以猜到的最大数
 
Sample Input
2 1 3
 
Sample Output
1 7
 
 
 1 #include<stdio.h>
 2 #include<math.h>
 3 int main()
 4 {
 5     int t,n;
 6     scanf("%d",&t);
 7     while(t--)
 8     {
 9         scanf("%d",&n);
10         int ans=0;
11         ans=pow(2,n)-1;
12         printf("%d
",ans);
13     }
14     return 0;
15 }
16 //解题报告:
17 /*
18 一开始也想到了二分,因为快速查找,二分法是熟读很快的方法。
19 但是没有想到这样用:
20 如果在一定区间里去查找一个数,如果区间很大,那么用二分法
21 每次可以将范围缩小一半;那么反过来,如果要查找一个固定的数,
22 用二分的思想,让范围一直往右靠(右端不变,左端加1),就能找到足够大的数。
23  
24 假设要查找的最大数是m,
25 则,第一次查找,(m+1)/2=m;得m=1;
26 第二次查找,((m+1)/2+1+m)/2=m;得m=3;
27 第三次查找,(((m+1)/2+1+m)/2+1+m)=m;得m=7;
28 归纳:m=2^n-1; 
29 */ 

---恢复内容结束---

原文地址:https://www.cnblogs.com/qianyanwanyu--/p/4360099.html