Вгадайте число
Це інтерактивна задача. Це означає, що під час тестування разом з вашим розв'язком буде запускатися програма журі (далі - інтерактор). Вашій програмі потрібно "спілкуватися" з нею. Для мов C++ та Python наданий шаблон, як правильно комунікувати.
Інтерактор загадав певне число від до . Вам потрібно вгадати це число. Ви можете давати числа інтерактору, а він буде відповідати, чи число, яке він загадав, більше чи менше за те, що ви йому передали.
Наприклад, припустимо, інтерактор загадав число . Якщо ви йому передасте число , то він скаже «більше». Якщо число , то скаже «менше». Якщо , то «рівне».
Вам потрібно за питань зрозуміти, що це за число.
Вам може бути корисно прочитати про двійковий (бінарний) пошук.
Нижче можна знайти коди на різних мовах, які отримують 6 балів.
Протокол взаємодії
Вам потрібно робити запитати у такому форматі:
«? x
». Де () — число, яке ви хочете передати інтерактору. Ви можете це робити не більше разів. Вам потрібно це вивести, а потім вивести символ нового рядка. Після цього обов'язково потрібно виконати операцію flush
. Вам потрібно зчитати відповідь. Якщо число, яке загадав інтерактор, більше за ваше, то ви зчитаєте число . Якщо менше, то . Якщо ваше число є тим числом, що загадав інтерактор, то ви зчитаєте .
Операцію flush
у різних мовах потрібно виконувати так:
fflush(stdout)
абоcout.flush()
в C++;System.out.flush()
в Java;flush(output)
в Pascal;stdout.flush()
в Python;для всіх інших мов вам потрібно дивитися документацію самостійно.
Після того, як ви будете впевнені у тому, яке число загадав інтерактор, вам потрібно вивести «! x
», символ нового рядка та виконати операцію flush
.
Приклади
1 -1 0
? 30 ? 90 ? 83 ! 83
Оцінювання
Нехай — максимальна кількість питань серед усіх тестів.
Якщо , то ви отримаєте балів.
Інакше, ви отримаєте балів.