Исполнитель Щелчок преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены номера:
1. Прибавить 2.
2. Прибавить 5.
3. Умножить на 2.
Первая команда увеличивает число на 2, вторая – на 5, третья – умножает на 2. Сколько различных результатов можно получить из исходного числа 8 после выполнения программы, содержащей 13 команд, если известно, что запрещено повторять команду, сделанную на предыдущем шаге.
Решение 1:
a = [[8, ’0’]]
for i in range(13):
n = len(a)
for j in range(n):
l = a.pop(0)
last_command = l[1]
if last_command == ’0’:
a.append([l[0] + 2, ’1’])
a.append([l[0] + 5, ’2’])
a.append([l[0] * 2, ’3’])
elif last_command == ’1’:
a.append([l[0] + 5, ’2’])
a.append([l[0] * 2, ’3’])
elif last_command == ’2’:
a.append([l[0] + 2, ’1’])
a.append([l[0] * 2, ’3’])
else:
a.append([l[0] + 2, ’1’])
a.append([l[0] + 5, ’2’])
arr = set()
for i in range(len(a)):
arr.add(a[i][0])
print(len(arr))
Решение 2:
s = set()
def f(a, k=0, r=0):
if k == 13:
s.add(a)
return
if r != 1:
f(a + 2, k + 1, 1)
if r != 2:
f(a + 5, k + 1, 2)
if r != 3:
f(a * 2, k + 1, 3)
f(8)
print(len(s))