Ошибка.
Попробуйте повторить позже
Исполнитель преобразует число на экране. У исполнителя есть две команды, которым присвоены номера:
1. Увеличь на 1
2. Умножь на 2
Программа для исполнителя – это последовательность команд.
Сколько существует программ, для которых при исходном числе 5 результатом является число 299, если известно, что никакую команду нельзя выполнять более трёх раз подряд?
# c1 - количество совершенных команд 1 # с2 - количество совершенных команд 2 def f(a, b, c1=0, c2=0): if a > b: return 0 if a == b: return 1 s = 0 if c1 < 3: s += f(a + 1, b, c1 + 1, 0) if c2 < 3: s += f(a * 2, b, 0, c2 + 1) return s print(f(5, 299))
Ошибка.
Попробуйте повторить позже
Исполнитель преобразует число на экране. У исполнителя есть три команды, которым присвоены номера:
1. Увеличь на 1
2. Увеличь на 3
3. Умножь на 4
Программа для исполнителя – это последовательность команд.
Сколько существует программ, для которых при исходном числе 1 результатом является число 824, при этом траектория вычислений содержит числa 21 и 68, причём можно использовать только ту команду, чей номер отличается на 1 от номера команды, выполненной на предыдущем шаге?
# c - номер команды на предыдущем шаге # r1 - флаг наличия в траектории 21 # r2 - флаг наличия в траектории 68 def f(a, b, c=0, r1=False, r2=False): if a > b: return 0 if a == b and r1 and r2: return 1 if a == 21: r1 = True if a == 68: r2 = True if c == 1 or c == 3: return f(a + 3, b, 2, r1, r2) if c == 2: return f(a + 1, b, 1, r1, r2) + f(a * 4, b, 3, r1, r2) return f(a + 1, b, 1, r1, r2) + f(a + 3, b, 2, r1, r2) + f(a * 4, b, 3, r1, r2) print(f(1, 824))
Ошибка.
Попробуйте повторить позже
Исполнитель преобразует число на экране. У исполнителя есть три команды, которым присвоены номера:
1. Увеличь на 4
2. Умножь на 2
3. Умножь на 3
Программа для исполнителя – это последовательность команд.
Сколько существует программ, для которых при исходном числе 2 результатом является число 296, при этом траектория вычислений содержит число 6, не содержит числа 18 и после первой команды нельзя использовать третью, а после второй - первую?
# c - номер команды на предыдущем шаге # r - флаг наличия в траектории 6 def f(a, b, c=0, r=False): if a > b or a == 18: return 0 if a == b and r: return 1 if a == 6: r = True s = f(a * 2, b, 2, r) if c != 1: s += f(a * 3, b, 3, r) if c != 2: s += f(a + 4, b, 1, r) return s print(f(2, 296))
Ошибка.
Попробуйте повторить позже
Исполнитель преобразует число на экране. У исполнителя есть пять команд, которым присвоены номера:
1. Увеличь на разряд единиц
2. Увеличь на разряд десятков
3. Умножь на разряд единиц
4. Умножь на разряд десятков
5. Прибавь 1
Первая и третья команды используют значение разряда единиц числа (например у 13 это 3, а у 28 - 8), а вторая и четвертая команды используют значение разряда десятков числа (например у 81 это 8, а у 35 это 3). Причём не разрешается выполнять команду, если после неё число на экране не изменится, либо превратится в 0. Программа для исполнителя – это последовательность команд.
Сколько существует программ, для которых при исходном числе 25 результатом является число 111, если известно, что нельзя повторять команду, сделанную два шага назад (например программа 112 допустима, а 121 - нет)?
from functools import lru_cache # c1 - номер команды на предыдущем шаге # с2 - номер команды на ПРЕДпредыдущем шаге @lru_cache(None) def f(a, b, c1=0, c2=0): if a > b: return 0 if a == b: return 1 s = 0 x = a % 10 # Число единиц y = a // 10 % 10 # Число десятков if c2 != 1 and x != 0: s += f(a + x, b, 1, c1) if c2 != 2 and y != 0: s += f(a + y, b, 2, c1) if c2 != 3 and x != 0 and x != 1: s += f(a * x, b, 3, c1) if c2 != 4 and y != 0 and y != 1: s += f(a * y, b, 4, c1) if c2 != 5: s += f(a + 1, b, 5, c1) return s print(f(25, 111))
Ошибка.
Попробуйте повторить позже
Исполнитель преобразует число на экране. У исполнителя есть три команды, которым присвоены номера:
1. Прибавь 8
2. Умножь на 3
3. Увеличь на разряд единиц
Первая из них увеличивает число на экране на 8, вторая увеличивает число на экране в 3 раза, третья увеличивает число на экране на значение разряда единиц (например число 12 увеличится на 2, а число 25 на 5). Программа для исполнителя – это последовательность команд.
Сколько существует программ, для которых при исходном числе 4 результатом является число 174, если известно, что нельзя повторять команду, сделанную на предыдущем шаге.
# c - номер команды на предыдущем шаге def f(a, b, c=0): if a > b: return 0 if a == b: return 1 s = 0 if c != 1: s += f(a + 8, b, 1) if c != 2: s += f(a * 3, b, 2) if c != 3: s += f(a + (a % 10), b, 3) return s print(f(4, 174))