Gym-101375H-MaratonIME gets candies-猜数字交互题

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;
}
发布了21 篇原创文章 · 获赞 1 · 访问量 427

猜你喜欢

转载自blog.csdn.net/xcy2001/article/details/104381704