Задать вопрос
@Taros

Как решить задачу, используя одну формулу и не успользуя if, else, elif?

Имеется задача.
Пользователь вводит число, условно от 1 до 100.
Программа должна угадать загаданное число, за минимальное число шагов, циклов, строк кода. После того как программа выдвигает предположение она может получить информацию лишь больше оно или меньше загаданного числа.

Это сугубо мой личный интерес, подсказывайте только если вам нечем заняться)
Мир не сгорит если эту задачу не решить)
  • Вопрос задан
  • 242 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 6
Алгоритм называется «бинарный поиск» – гуглите.

Причём тут «не используя if» ? Получили ответ «больше» ИЛИ «меньше» — далее надо предпринимать те или иные действия. Можно обойти непосредственно использвание условного оператора, но.. зачем ?
Ответ написан
Vindicar
@Vindicar
RTFM!
Ну вместо if можно использовать список функций (лямбд или обычных).
x = 1
[
  lambda: print('x < 0!'), #False = 0
  lambda: print('x > 0!'), #True = 1
][x > 0]()

Дальше просто построить из таких блоков дерево решений методом дихотомии.
Ответ написан
Комментировать
gbg
@gbg
Любые ответы на любые вопросы
Бинарный поиск при таких условиях - это ввод восьмибитного числа по битам, начиная со старшего.
Ответ написан
Комментировать
wataru
@wataru Куратор тега Математика
Разработчик на С++, экс-олимпиадник.
Бинарный поиск.
Можно реализовать без if-ов вообще.
Суть в том, что у вас есть текущий отрезок. Находите середину, спрашиваете про нее. Получаете ответ R = 0 или 1. Потом прибавляете половину отрезка к левой границе, умноженную на R и вычитаете ее из правой границы, умноженную на 1-R. Таким образом сдвинется только одна граница. Остается вопрос, что делать с выходом из цикла. Там же внутри if запрятан.

Можно или скопировать код 7 раз (2^7 > 100), или иметь бесконечный цикл, который будет сравнивать границы и вызвать одну из двух функций в массиве на 2 элемента. Одна из функций выведет ответ и завершит работу программы через exit. Вторая - не будет делать ничего.
Ответ написан
Комментировать
Alexandroppolus
@Alexandroppolus
кодир
После того как программа выдвигает предположение она может получить информацию лишь больше оно или меньше загаданного числа

а если предположение оказалось равно загаданному числу, то что?
почему спросил: если допускается инфа о равенстве, можно угадать за 6 попыток, а не за 7.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы