23.05 Количество программ из A в B смешанное
Ошибка.
Попробуйте повторить позже
Исполнитель Школково преобразует число, записанное на экране.
У исполнителя есть две команды, которым присвоены номера:
1. Прибавить 1,
2. Прибавить 2.
Первая команда увеличивает число на экране на 1, вторая увеличивает его на 2. Программа для исполнителя Школково — это последовательность команд.
Сколько существует программ, для которых при исходном числе 1 результатом является число 19 и при этом траектория вычислений содержит число 8 и не содержит число 14? Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы 121 при исходном числе 7 траектория будет состоять из чисел 8, 10, 11.
Пусть — количество программ, которые число 1 преобразуют в число n. Тогда верно следующее
утверждение:
Заполним таблицу по данной формуле до 7:
По условию сказано, что траектория должна содержать число 8, значит , так как число 9
можем получить только первой командой.
Продолжим заполнять таблицу:
В условии сказано, что траектория не содержит число 14. Значит .
Заполним таблицу до конца:
Отсюда получаем ответ — 840.
Решение рекурсией
Мы решаем задачу рекурсивно, строя функцию f(x, y), которая подсчитывает количество
программ, преобразующих число в число
, учитывая все условия задачи.
1. Сначала мы проверяем, нарушает ли текущее число условия задачи: - если текущее число
превысило целевое число
, дальнейшие шаги невозможны, возвращаем 0; - если текущее число
равно запрещённым значениям (например, 14, которое не должно встречаться в траектории), путь
недопустим, возвращаем 0.
2. Если текущее число совпало с целевым числом
, значит, мы нашли корректную программу,
возвращаем 1.
3. В остальных случаях считаем все возможные варианты продолжения программы: - прибавляем 1 к
числу и вызываем рекурсию; - прибавляем 2 к числу
и вызываем рекурсию; - суммируем
результаты этих вызовов, чтобы получить общее количество программ, ведущих от
к
.
4. Так как траектория должна содержать число 8, но не содержать число 14, мы делим задачу на два этапа: - первый этап: от 1 до 8 с проверкой запрета числа 14; - второй этап: от 8 до 19 с проверкой запрета числа 14; - общее количество программ равно произведению результатов двух этапов, так как для каждого пути первой части можно использовать любой путь второй части.
# Определяем функцию f(x, y), которая считает количество программ def f(x, y): # Если текущее число больше целевого или равно запрещённому числу (14), # путь невозможен, возвращаем 0 if x > y or x == 14: return 0 # Если текущее число совпало с целевым, # найден корректный путь, возвращаем 1 if x == y: return 1 # В остальных случаях пробуем оба варианта команд: # прибавить 1 и прибавить 2, и суммируем результаты return f(x + 1, y) + f(x + 2, y) # Вычисляем количество программ с учётом условия траектории: # первый этап: от 1 до 8 # второй этап: от 8 до 19 # Общее количество программ равно произведению двух этапов print(f(1, 8) * f(8, 19))
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!