№ 0OOOFI (Уровень сложности: Повышенный)
Исполнитель преобразует число на экране. У исполнителя есть две команды, обозначенные буквами:
А. Прибавь 1;
Б. Поменяй местами.
А. Прибавь 1;
Б. Поменяй местами.
Первая команда увеличивает число на экране на 1. Вторая команда может применяться только к числу, у которого цифра разряда десятков по значению меньше цифры, стоящей в разряде единиц, и заменяет число числом, в котором цифры двух младших разрядов поменяны местами. Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 110 результатом является число 154?
Правильный ответ:
34
Текстовое решение:
def f(start, end):
p = str(start) # преобразуем для удобства работы к строке
if start > end: return 0
if start==end: return 1
# Проверяем, меньше ли цифра в разряде десятков, чем в разряде единиц
if p[1]<p[2]: # Если меньше, то проводим замену
return f(start+1, end) + f(int(p[0]+p[2]+p[1]), end) # меняем цифры местами и преобразуем к числу
else: # Если нет, то выполняем только команду +1
return f(start+1, end)
print(f(110, 154))
Редактировать задание
Вставка формулы (LaTeX)
Быстрые символы:
\frac{}{} (дробь)
x^{}
x_{}
\sqrt{}
\pi
\leq
\geq
\int
\sum
\infty