Условие: № 5640 (Уровень: Средний)
• Статья подготовлена командой itpy, подписывайтесь на наш телеграм канал!
Исполнитель преобразует число на экране.
У исполнителя есть две команды, которые обозначены латинскими буквами:
A. Вычти 4
B. Вычти сумму цифр числа
Программа для исполнителя – это последовательность команд.
Сколько существует программ, для которых при исходном числе 36 результатом является число 2, и при этом траектория вычислений содержит число 14?
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы ABA при исходном числе 33 траектория будет состоять из чисел 29, 18, 14.
Решение через Python:
def MySum(x):
summ = sum([int(i) for i in str(x)])
return summ
def F(a, b):
if a < b:
return 0
elif a == b:
return 1
else:
return F(a-4, b) + F(a - MySum(a), b)
print(F(36, 14) * F(14, 2))
Комментарии к первому решению:
- def MySum(x): - объявление функции с именем MySum, которая принимает один аргумент x.
- summ = sum([int(i) for i in str(x)]) - вычисление суммы цифр числа x. Каждая цифра из числа x преобразуется в целое число и добавляется в список, затем сумма всех элементов списка присваивается переменной summ.
- return summ - возвращение значения переменной summ из функции MySum.
- def F(a, b): - объявление функции с именем F, которая принимает два аргумента a и b.
- if a < b: - проверка, если значение a меньше значения b.
- return 0 - возвращение значения 0, если условие в строке 5 выполняется.
- elif a == b: - проверка, если значение a равно значению b.
- return 1 - возвращение значения 1, если условие в строке 7 выполняется.
- else: - выполнение кода, если ни одно из условий в строках 5 и 7 не выполняется.
- return F(a-4, b) + F(a - MySum(a), b) - рекурсивный вызов функции F с измененными аргументами a и b и сложение результатов.
- print(F(36, 14) * F(14, 2)) - вызов функции F с аргументами 36 и 14, умножение результата на вызов функции F с аргументами 14 и 2, и вывод результата на экран.
def MySum(x):
summ = sum([int(i) for i in str(x)])
return summ
def F(a, b):
if a <= b:
return a == b
return F(a-4, b) + F(a - MySum(a), b)
print(F(36, 14) * F(14, 2))
Комментарии ко второму решению:
- def MySum(x): - объявление функции с именем MySum, которая принимает один аргумент x.
- summ = sum([int(i) for i in str(x)]) - вычисление суммы цифр числа x. Каждая цифра из числа x преобразуется в целое число и добавляется в список, затем сумма всех элементов списка присваивается переменной summ.
- return summ - возвращение значения переменной summ из функции MySum.
- def F(a, b): - объявление функции с именем F, которая принимает два аргумента a и b.
- if a <= b: - проверка, если значение a меньше или равно значению b.
- return a == b - возвращение значения True, если a равно b, иначе возвращение значения False.
- return F(a-4, b) + F(a - MySum(a), b) - рекурсивный вызов функции F с измененными аргументами a и b и сложение результатов.
- print(F(36, 14) * F(14, 2)) - вызов функции F с аргументами 36 и 14, умножение результата на вызов функции F с аргументами 14 и 2, и вывод результата на экран.