Разберёмся, как быстро угадать число из пятничной задачи.
Честный вариант
Здесь оптимальной стратегией будет «Бинарный поиск», он же метод деления пополам.
При каждой попытке нужно называть середину диапазона, тогда после ответа, новый диапазон будет в два раза меньше (не всегда ровно в два, но это мелочи).
Например, друг загадал число 30. Диалог получится такой. Начинаем всегда с 50 — это середина исходного диапазона от 1 до 100:
— 50?
— Моё число меньше.
Новый диапазон — от 1 до 50, спрашиваем про середину:
— 25?
— Моё число больше.
Новый диапазон — от 25 до 50. Его середина — 37.5, так что можно назвать 37 или 38. И так далее.
Сколько раз 100 можно нацело делить пополам, пока диапазон не сузится до одного числа? Семи раз точно хватит, так как 2⁷>100.
Коварный вариант
Особенное коварство этого варианта в том, что он совсем не коварный!
Друг может перезагадывать число сколько хочет — пока его ответы правдивы, это не имеет значения. С помощью бинарного поиска вы всё так же будете идти по половинным диапазонам. В худшем случае вам понадобится так же 7 попыток — потом диапазон сузится до 1 числа и перезагадывать будет уже некуда 👌
***
Идеей этой задачи с нами поделился дружественный Практикумовский телеграм-канала «Программирование и тестирование». В нём публикуют полезные материалы для начинающих разработчиков и тестировщиков, погружают в профессии и отвечают на вопросы.
Заглядывайте в канал к ребятам, у них полезно, уютно и дружелюбно! ☺️
Post #311
3.42K
- 🔥 11
- 👍 5
- ❤ 4
- 👏 2