GDUT 2020寒假训练 专题一 H
原题链接
题目大意
这个人手里有糖果,你要猜糖果的数量,数量在1~1e9之间,你只有最多50次机会。输出你猜的数字例如“”Q 9”,会返回你一个字符 >表示答案比这个数字大,<表示比答案小,=表示猜对了。在才对之后应该结束程序,并且在输出答案后清空缓冲区。cin.flush()或fflush(stdout)。
思路1
二分
在区间l~r之间猜数,每次输出区间中点,若猜的数大了,则将右区间调整为mid-1,若小了则调整左区间为mid+1,直到猜对或l>r。
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
long long l,mid,r;
l=1;
r=1000000000;
while(l<=r)
{
mid=(l+r)/2;
cout<<"Q "<<mid<<endl;
cout.flush();
string s;
cin>>s;
if(s[0]=='>')
{
l=mid+1;
}
else if(s[0]=='<')
{
r=mid-1;
}
else
{
break;
}
}
return 0;
}