Присоединиться

Информатика·Алгоритмы и программирование·9–11 класс

Сколько программ переводят 2 в 26, проходя через 10 и не проходя через 17

Условие

У исполнителя две команды: «прибавь 1» увеличивает число на экране на единицу, «умножь на 2» удваивает его. Программа — непустая последовательность таких команд. Траекторией вычислений называется последовательность всех чисел, которые появлялись на экране, включая исходное число 2 и результат 26. Сколько существует различных программ, которые преобразуют число 2 в число 26, причём траектория содержит число 10 и не содержит числа 17?

Ответ

28 программ

Решение по шагам

  1. Шаг 1. Разрезаем задачу в обязательной точке

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

    Если траектория обязана содержать 10, то она однозначно распадается на два независимых участка:

    21026.2 \longrightarrow 10 \longrightarrow 26.

    Любую программу первого участка можно приписать к любой программе второго, и обратно — так получается каждая нужная программа ровно один раз. По правилу произведения

    N=N210N1026.N = N_{2\to10} \cdot N_{10\to26}.

    Важная деталь: на первом участке все числа лежат между 2 и 10, поэтому запрет на 17 там не работает — он ограничивает только второй участок.

  2. Шаг 2. Формула подсчёта путей и учёт запрета

    Для участка с началом ss обозначим через R(n)R(n) число программ, ведущих из ss в nn. Смотрим на последнюю команду:

    R(n)=R(n1)+{R(n/2),n чётно,0,n нечётно,R(n) = R(n-1) + \begin{cases} R(n/2), & n \text{ чётно},\\ 0, & n \text{ нечётно},\end{cases}

    при этом R(s)=1R(s) = 1 (пустая программа), R(n)=0R(n) = 0 для всех n<sn < s (такие числа недостижимы) и R(17)=0R(17) = 0 — через запрещённое число не проходит ни одна траектория.

    Обнуление R(17)R(17) — это не «вычёркивание строки», а именно присвоение нуля: следующие строки таблицы продолжают ссылаться на неё и получают ноль в качестве слагаемого.

Осталось ещё 3 шага — откроются после входа:

  • Шаг 3. Первый участок: из 2 в 10
  • Шаг 4. Второй участок: из 10 в 26 мимо 17
  • Шаг 5. Ответ и проверка перебором хвостов
Получить полное решение

Бесплатно · займёт минуту

Частые ошибки

  • Складывают результаты участков (7+4=117 + 4 = 11) вместо перемножения — участки независимы, работает правило произведения.

  • Не обнуляют Q(17)Q(17), а просто «пропускают» эту строку: тогда Q(18)Q(18) ошибочно унаследует значение и ответ станет заметно больше.

  • Забывают, что на втором участке числа меньше 10 недостижимы, и подставляют в Q(12)=Q(11)+Q(6)Q(12) = Q(11) + Q(6) значение R(6)=3R(6) = 3 из первой таблицы.

  • Применяют запрет на 17 к первому участку или, наоборот, считают, что запрет отменяет и обязательное прохождение через 10.

  • Пытаются посчитать «все пути 2 → 26 минус пути через 17» — здесь это ошибка, потому что дополнительно требуется прохождение через 10.

  • Считают траекторию без начального числа 2 и конечного 26 и из-за этого неверно трактуют условия «содержит 10» и «не содержит 17».

Другие задачи по теме «Алгоритмы и программирование»