БлогNot. Задача про лестницу :)

Задача про лестницу :)

Когда колено болит и хромаешь, поневоле начинаешь считать ступеньки.

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

Всего ступенек на лестнице N.

Сколько существует способов подняться по лестнице?

Для решения не нужно ничего, кроме элементарной логики.

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

Как насчёт третьей ступеньки?

По условию, существует только два варианта попасть на неё - либо мы сделали короткий одиночный шаг со ступеньки 2, либо это был двойной шаг со ступеньки 1.

Мы знаем, что у нас есть только один способ достичь первой ступеньки, и два способа достичь второй. Так как третьей ступеньки мы можем достичь со второй или с первой, сложив эти количества, видим, что подняться на третью ступеньку имеется 3 способа (1-1-1, 1-2, 2-1).

Та же логика применяется и дальше. Попасть на четвёртую ступеньку можно со второй (куда было два способа добраться) или с третьей (куда можно влезть тремя способами). Получается пять способов для ступени 4.

Если кто ещё не догадался, мы встретились с миллион первым применением чисел Фибоначчи, а для них имеется явная формула вычисления N-го члена ряда, известная как формула Бине.

Таким образом, проблема решается со сложностью O(1) и ничего перебирать не надо.

Между прочим, подобную задачу часто предлагали решить соискателям при трудоустройстве программистом в компанию Google :)

30.05.2018, 12:10 [2367 просмотров]


теги: личное числа алгоритм

К этой статье пока нет комментариев, Ваш будет первым