Ещё одна задачка на логику, которой программисты мучают друг друга на собеседовании. Считается, что она проверяет нестандартное мышление. Но чу! Можно проверить нестандартное мышление того, кто вам эту задачку задаёт!
Ситуация. Однажды в 20-этажном доме вандалы-математики разбили почти все кнопки в лифте, сохранив только две. От короткого замыкания последние стали работать так: одна поднимает лифт на 13 этажей, а вторая опускает на 8.
Вопрос. Как жильцам попасть с 13-го этажа на 8-й?
В этой задаче есть момент из реальной жизни, который существенно упрощает решение. Но начнём с классического ответа.
Суть в том, что лифт не может выезжать за границы этажей. То есть если на 13 этаже мы нажмём кнопку «вверх», которая должна поднять лифт на 13 этажей, то он никуда не поедет, потому что 13 + 13 = 26, а в доме столько этажей нет. Значит, единственное, что нам остаётся на первом шаге — нажать «вниз»:
Вниз → 5 (13 - 8).
Здесь 5 — это номер этажа, на который приехал лифт, а цифры в скобках показывают начальный.
С 5 этажа мы можем уехать только вверх. Получается, что каждый раз у нас есть только один вариант, на какую кнопку нажимать. Давайте попробуем применить этот принцип и посмотреть, что получится:
Вниз → 5 (13 - 8).
Вверх → 18 (5 + 13).
Вниз → 10 (18 - 8).
Вниз → 2 (10 - 8).
Вверх → 15 (2 + 13).
Вниз → 7 (15 - 8).
Вверх → 20 (7 + 13).
Вниз → 12 (20 - 8).
Вниз → 4 (12 - 8).
Вверх → 17 (4 + 13).
Вниз → 9 (17 - 8).
Вниз → 1 (9 - 8).
Вверх → 14 (1 + 13).
Вниз → 6 (14 - 8).
Вверх → 19 (6 + 13).
Вниз → 11 (19 - 8).
Вниз → 3 (11 - 8).
Вверх → 16 (3 + 13).
Вниз → 8 (16 - 8).
В итоге за 19 поездок мы добрались до нужного этажа. Самое интересное, что по этим правилам лифт дальше никуда поехать не может: 8 + 13 = 21, а 8 - 8 = 0, что выходит за границы этажей. Придётся всё-таки вызывать мастера и делать ремонт.
Но есть и второе решение. Чаще всего в жизни бывает так: как только лифт доезжает до самого верхнего или нижнего этажа, он останавливается, независимо от того, сколько ещё ему оставалось проехать. Это логично: дошли до граничных значений и остановились. Воспользуемся этим и попробуем решить нашу задачу быстрее:
Вниз→ 5 (13 - 8).
Вниз → 1 (5 - 8) → доехали до первого этажа и остановились.
А как добраться с 1 этажа на 13 мы уже знаем из прошлого решения:
Вверх → 14 (1 + 13).
Вниз → 6 (14 - 8).
Вверх → 19 (6 + 13).
Вниз → 11 (19 - 8).
Вниз → 3 (11 - 8).
Вверх → 16 (3 + 13).
Вниз → 8 (16 - 8).
Итого 9 поездок. В два раза меньше, чем первым способом!
Граждане, берегите лифт!