
Python
Решите с помощью языка программирования Python!
Егэ 23 задание


Такие задачи решаются "в лоб" динамическим программированием.
t = [0 for _ in range(15)] # t[i] - кол-во траекторий до числа i
t[2] = 1 # начало всех траекторий
# Кол-во траекторий до чисел 3..6
for i in range(3, 7): t[i] = t[i - 1] + t[i - 3] + (0 if i % 2 else t[i // 2])
# Удаляем траектории, не проходящие через 6
for i in range(2, 6): t[i] = 0
# Кол-во траекторий до чисел 7..9
for i in range(7, 10): t[i] = t[i - 1] + t[i - 3] + (0 if i % 2 else t[i // 2])
# Удаляем траектории, не проходящие через 9
for i in range(6, 9): t[i] = 0
# Кол-во траекторий до чисел 10..14
for i in range(10, 15): t[i] = t[i - 1] + t[i - 3] + (0 if i % 2 else t[i // 2])
print(t[14])
t = [0 for _ in range(15)] # t[i] - кол-во траекторий до числа i
t[2] = 1 # начало всех траекторий
# Кол-во траекторий до чисел 3..6
for i in range(3, 7): t[i] = t[i - 1] + t[i - 3] + (0 if i % 2 else t[i // 2])
# Удаляем траектории, не проходящие через 6
for i in range(2, 6): t[i] = 0
# Кол-во траекторий до чисел 7..9
for i in range(7, 10): t[i] = t[i - 1] + t[i - 3] + (0 if i % 2 else t[i // 2])
# Удаляем траектории, не проходящие через 9
for i in range(6, 9): t[i] = 0
# Кол-во траекторий до чисел 10..14
for i in range(10, 15): t[i] = t[i - 1] + t[i - 3] + (0 if i % 2 else t[i // 2])
print(t[14])
Алекс Dj Cj
?
Искомое количество программ равно произведению количества программ, получающих из числа 2 число 8, на количество программ, получающих из числа 8 число 10, и на количество программ, получающих из числа 10 число 12.
Будем решать задачу с конца. Число 12 из числа 10 можно получить двумя способами (10+1+1; 10+2). Число 10 из числа 8 можно получить двумя способами (8+1+1; 8+2). Остается узнать количество способов получения числа 8 из числа 2. Начнем свои рассуждения с числа 3, т. к. двойка это начальное число. Тройку можно получить только одним способом – прибавив 1. Четверку получим двумя способами – прибавив единицу к тройке или добавив двойку к двойке и т. д. Запишем эти рассуждения в следующем виде:
R(2) = 1
R(3) = R(2) = 1
R(4) = R(3) + R(2) = 2
R(5) = R(4) + R(3) = 2 + 1 = 3
R(6) = R(5) + R(4) + R(2) = 3 + 2 + 1 = 6
R(7) = R(6) + R(5) = 6 + 3 = 9
R(8) = R(7) + R(6) = 9 + 6 = 15
Таким образом, количество программ, удовлетворяющих условию задачи, равно R(2) * R(8) * R(10) * R(12) = 1 * 15 * 2 * 2 = 60.
Ответ: 60.
Будем решать задачу с конца. Число 12 из числа 10 можно получить двумя способами (10+1+1; 10+2). Число 10 из числа 8 можно получить двумя способами (8+1+1; 8+2). Остается узнать количество способов получения числа 8 из числа 2. Начнем свои рассуждения с числа 3, т. к. двойка это начальное число. Тройку можно получить только одним способом – прибавив 1. Четверку получим двумя способами – прибавив единицу к тройке или добавив двойку к двойке и т. д. Запишем эти рассуждения в следующем виде:
R(2) = 1
R(3) = R(2) = 1
R(4) = R(3) + R(2) = 2
R(5) = R(4) + R(3) = 2 + 1 = 3
R(6) = R(5) + R(4) + R(2) = 3 + 2 + 1 = 6
R(7) = R(6) + R(5) = 6 + 3 = 9
R(8) = R(7) + R(6) = 9 + 6 = 15
Таким образом, количество программ, удовлетворяющих условию задачи, равно R(2) * R(8) * R(10) * R(12) = 1 * 15 * 2 * 2 = 60.
Ответ: 60.
Алекс Dj Cj
В сборнике ответ 40
Похожие вопросы
- Нужна помощь.(Язык программирования Python)
- ПОМОГИТЕ, ПОЖАЛУЙСТА, РЕШИТЬ ИНФОРМАТИКУ. Язык программирования Python
- Как изучить язык программирования Python ?
- Люди которые знают язык программирования Python, расскажите сколько на это ушло времени и где вы учили Python?
- По поводу языка программирования Python...
- Где и как эфективнее всего изучать язык программирования Python?
- Как написать цикл на языке программирования Python
- Язык программирования Python, словари и множества
- Создайте программу, которая выводит первые 1000 простых чисел на языке программирования Python.
- Язык программирования Python не могу найти ошибку в коде