您的位置:首页 > 其它

2.猜数字

2016-04-05 20:52 176 查看
A有1数m,B来猜.B每猜一次,A就说"太大","太小"或"对了" 。 <br>问B猜n次可以猜到的最大数。 <br>

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

[align=left]Output[/align]
猜n次可以猜到的最大数<br>

[align=left]Sample Input[/align]

213

[align=left]Sample Output[/align]

17
这个问题可以看成是二分查找逆运算。设最大数为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;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: