猜数字

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,m],m即为所求,利用二分的思想每次去一半向右靠(有边界不变),可以推出公式:
(((((1+m)/2)+1+m)/2)+1+m)/2=m ;
感悟:感觉别人做的好快啊 ,拉下的越来越多了;
代码:
#include
#include
#include
using namespace std;
int main()
{
    int t,n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        if(n==1)//一次就中只能是1;
            printf("1\n");
        else if(n==2)//两次就中只能是2;
            printf("2\n");
        else
            printf("%.0f\n",pow(2,n)-1);
    }
}

posted @ 2016-03-22 21:17  勿忘初心0924  阅读(195)  评论(0编辑  收藏  举报