2.猜数字

来源:互联网 发布:淘宝客服主管日常管理 编辑:程序博客网 时间:2024/05/21 19:40
A有1数m,B来猜.B每猜一次,A就说&quot;太大&quot;,&quot;太小&quot;或&quot;对了&quot; 。 <br>问B猜n次可以猜到的最大数。 <br>

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

Output
猜n次可以猜到的最大数<br>

Sample Input
2
1
3

Sample Output
1
7
这个问题可以看成是二分查找逆运算。
设最大数为k,就是说在1到k这个范围内,m次可以找到这个范围内的任何一个数。
例如:
最大数为9,要找的是7,先,猜9,大了,二分猜5,小了,二分猜7.三次。根据这个规律,可以得出,k = 2^m - 1.
代码:
#include<iostream>using namespace std;int main(){    int p,sum,m;    cin>>p;    while(p)    {        --p;        sum=1;        cin>>m;        for(int i=1;i<=m;++i)        {            sum = sum*2;        }        cout<<sum-1<<endl;    }}
0 0
原创粉丝点击