Библиотека задач / Алгоритмы

6–9 классы и взрослые

Угадать число за семь вопросов

Условие

Загадано целое число от 11 до 100100 включительно. Разрешено задавать вопросы, на которые отвечают только «да» или «нет». Как гарантированно определить число не более чем за 77 вопросов?

О задаче · 6–9 классы
Тема
Алгоритмы
Для кого
6–9 классы и взрослые
Уровень библиотеки
Следующий шаг · ориентир
Записать идею

Личный черновик для заметок и расчётов. Он никуда не отправляется и не проверяется.

Подсказка 1

Первый вопрос: число не больше пятидесяти?

Подсказка 2

Каждый раз делите оставшийся диапазон на две части, различающиеся не более чем на один вариант.

Разобрать решение по шагам
01

Первое деление

Ответ на «число не больше 5050?» оставляет 5050 вариантов: от 11 до 5050 либо от 5151 до 100100.

02

Повторим тот же выбор

Делим текущий диапазон как можно поровну и спрашиваем про нижнюю половину. В худшем случае числа кандидатов таковы:

100→50→25→13→7→4→2→1.100\to50\to25\to13\to7\to4\to2\to1.

Это семь вопросов.

03

Почему шести недостаточно

Шесть ответов «да/нет» имеют не более 26=642^6=64 разных последовательностей. Чтобы отличить 100100 чисел, каждому нужен отдельный результат. Значит, гарантированно уложиться в шесть нельзя.

Ответ

77 вопросов достаточно; 66 не гарантируют ответ.

Главная идея

Двоичный поиск на каждом шаге уменьшает число кандидатов примерно вдвое. Чтобы он работал, вопрос должен надёжно определять нужную половину.

Как заметить эту идею в другой задаче

Есть упорядоченные варианты и надёжные вопросы про половину диапазона. Деление пополам даёт короткую стратегию даже в худшем случае.

Возможная ошибка

Оценивать стратегию только по удачному случаю. Гарантированное число вопросов определяется самым длинным возможным путём.

Источник и примечания

Источник и редакция

Учебный разбор Popov Academy · Алгоритмы и двоичный поиск. Не вариант конкретной олимпиады или экзамена.

Проверь себя

Сколько вопросов «да/нет» необходимо и достаточно, чтобы гарантированно определить число от 11 до 10001000?

Ответ к дополнительной задаче

1010 вопросов: 29=512<1000≤1024=2102^9=512<1000\le1024=2^{10}. Девяти недостаточно, а последовательное деление пополам даёт десять.

Продолжить тему: Поиск и алгоритмы →
Учебная схема

Popov Academy · Библиотека задач

Угадать число за семь вопросов

https://popov.academy/library/binary-search/

Условие

Загадано целое число от 11 до 100100 включительно. Разрешено задавать вопросы, на которые отвечают только «да» или «нет». Как гарантированно определить число не более чем за 77 вопросов?

Дополнительная задача

Сколько вопросов «да/нет» необходимо и достаточно, чтобы гарантированно определить число от 11 до 10001000?