任务条件:
这是一个交互式任务。
陪审团程序猜测一个整数 N (1 ≤ N ≤ 10^9),你的程序必须在不超过 100 次尝试中猜测。您可以通过从可能的整数范围中输出一个数字来进行查询。为响应每个请求,陪审团程序将报告将隐藏号码与请求中的号码进行比较的结果。
交互协议 在每次请求整数 X 之后,您的程序将在新行上收到将您的数字 X 与隐藏数字 N 进行比较的结果,该结果通过输出一个带换行符的字符来表示:
"<" :隐藏数严格小于请求中的数(N < X);
">" :隐藏数严格大于请求中的数(N > X);
“=”:隐藏的数字与请求中的数字匹配(N = X),收到这样的响应后,您的程序应该立即退出。
您的程序应该发出不超过 100 个请求。
我认为很明显你需要在这里使用二进制搜索。
#include <iostream>
using namespace std;
int main()
{
long long l = 1, r = 10e9, mid = (l + r) / 2;
while (true)
{
char input;
mid = (l + r) / 2;
cout << mid << endl;
cin >> input;
if (input == '>')
l = mid + 1;
else if (input == '<')
r = mid - 1;
else if(input == '=')
return 0;
}
}
程序没有按时运行。这是否意味着它“卡在”某个地方?但是哪里?为什么?理论上一切都应该正常工作......
一切正常,只是不要取 10 10作为最大值,而是取 10 9 -
但更好的是——不要在琐事上浪费时间,不要强迫他们转换
double
——int
按原样写:好吧,或者如果编译器不理解这一点(对于 ACMP - 它确实:)),那么
PS 可能,测试系统与 一起工作
int
,并将您的第一句话 5000000000 视为 705032704,这会导致误解和从指定到十亿的数字循环......为什么要加这么多?我会这样做:
首先,20 亿完全适合
unsigned int
,其次,您显示答案并输入一个可以具有三个值的字符,如果不相等,则更少或更多。