Исполнитель преобразует число на экране.
У исполнителя есть три команды, которые обозначены буквами.
A. Вычесть 1.
B. Умножить на 2.
C. Умножить на 3.
Программа для исполнителя — это последовательность команд. Например, программа BAC при исходном
Сколько существует программ, которые преобразуют исходное
Приведём решение на языке Python.
def f(start, end, k):
if start > end + 1:
return 0
if start == end:
return 1
else:
if k == 1:
return f(start * 2, end, k - 1) + f(start * 3, end, k - 1)
else:
return f(start - 1, end, k + 1) + f(start * 2, end, k) + f(start * 3, end, k)
print(f(3, 20, 0))
Ответ: 4.
Приведём решение Александра Кащеева на языке Python.
def A(i):
b.append(i+0.9)
return b
def BC(i):
if i%2==0: b.append(int(i/2))
if i%3==0: b.append(int(i/3))
return b
a,k=[20],3
n,b=0,[]
while True:
b.clear()
for i in a:
if i==k or i==k-0.1:
n+=1
if i>1:
if type(i)==float:
i=int(i+0.1)
BC(i)
else: A(i);BC(i)
if b==[]:break
a=b.copy()
print(n))

