№23 в КИМ
Исполнитель преобразует число на экране.
У исполнителя есть две команды, которым присвоены номера:
1. Прибавить 1
2. Умножить на 2
Первая команда увеличивает число на экране на 1, вторая умножает его на 2. Программа для исполнителя – это последовательность команд.
Сколько существует программ, для которых при исходном числе 1 результатом является число 30, при этом траектория вычислений не проходит через 10?
# код 1
def f(st, end):
a={st: 1}
for i in range(st + 1, end + 1):
a[i]=0
if i - 1 in a:
a[i]+=a[i - 1]
if i % 2 == 0 and int(i//2) in a:
a[i]+=a[int(i//2)]
return a[end]
print(f(1,9)*f(11,30))
# код 2
def f(st, end, propusk):
a={st: 1}
for i in range(st + 1, end + 1):
a[i]=0
a[propusk]=0
if i - 1 in a:
a[i]+=a[i - 1]
if i % 2 == 0 and int(i//2) in a:
a[i]+=a[int(i//2)]
return a[end]
print(f(1,30, 10))
первый раз пытаюсь дойти от 1 до 9 потом от 11 до 30 тем самым игнорировав 10.(но это почему-то не правильно)
второй раз просто сразу "сказал", что в 10 не ведут пути, каждый раз когда 10 участвует в счёте то оно возвращает 0 (не считаем пути от него)
почему первый код неправильный по сути же я так же не учитываю пути из 10