Задание №13 ЕГЭ Информатика с ответом и решением
Ответ: 26
Условие
Исполнитель ТР4 преобразует число на экране.
У исполнителя есть две команды, которым присвоены номера.
1. Прибавить 1.
2. Умножить на 2.
Первая команда увеличивает число на экране на 1, вторая умножает его на 2.
Программа для исполнителя ТР4 — это последовательность команд.
Сколько существует программ, которые преобразуют исходное число 2 в число 35 и при этом траектория вычислений содержит число 15 и не содержит числа 31?
Траектория вычислений — это последовательность результатов выполнения всех команд программы. Например, для программы 212 при исходном числе 7 траектория будет состоять из чисел 14, 15, 30.
Подсказки — как подойти к решению
- Заведи таблицу значений от стартового числа до целевого: для каждого числа в ней — количество программ, которые в него приводят.
- Обязательное промежуточное число 15 делит траекторию на два независимых участка, поэтому итог — произведение количеств программ на первом и на втором участке.
- Запрещённое число 31 обнуляй в динамике второго участка; чисел там немного, поэтому результат полезно перепроверить полным перебором коротких последовательностей команд.
Решение
Искомое количество программ равно произведению количества программ, получающих из числа 2 число 15, на количество программ, получающих из числа 15 число 35, траектория вычислений не должна содержать числа 31.
Пусть R(n) — количество программ, которые число 2 преобразуют в число n.
Верны следующие соотношения:
1. Если n не делится на 2, то тогда R(n) = R(n – 1), так как существует единственный способ получения n из n − 1 — прибавление единицы.
2. Пусть n делится на 2.
Если n > 2, то R(n) = R(n : 2) + R(n – 1).
Если n = 2, то R(n) = 1 (два способа: прибавление единицы и удвоение).
R(2) = 1;
R(3) = 1;
R(4) = R(2) + R(3) = 2;
R(5) = R(4) = 2;
R(6) = R(3) + R(5) = 3;
R(7) = R(6) = 3;
R(8) = R(4) + R(7) = 5;
R(9) = R(8) = 5;
R(10) = R(5) + R(9) = 7;
R(11) = R(10) = 7;
R(12) = R(6) + R(11) = 10;
R(13) = R(12) = 10;
R(14) = R(7) + R(13) = 13;
R(15) = R(14) = 13.
Программ для получения числа 35 из числа 15 всего 2, можно их перечислить: 12111 и 1121.
Таким образом, количество программ, удовлетворяющих условию задачи, равно 13 · 2 = 26.
Ответ: 26.
Приведём другое решение на языке Python.
def f(x, y):
if x > y or x == 31:
return 0
if x == y:
return 1
else:
return f(x + 1, y) + f(x * 2, y)
print(f(2, 15) * f(15, 35))
Типичные ошибки
- Запрещённое число не исключено на втором участке, поэтому добавлены лишние программы. Проверь, что в ячейке запрещённого числа стоит 0.
- Количество программ на втором участке принято за единицу — вероятно, найдена только одна последовательность команд. Перечисли все способы добраться от промежуточного числа до цели.
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №13 по информатике