Как решить задание 23 егэ информатики на python - Общение Python мододелов

Вопрос Как решить задание 23 егэ информатики на python

Регистрация
13 Сен 2013
Сообщения
77
Репутация
0
Спасибо
0
Монет
0
236464205_24e9475315d0576b28b55dc9d9fe50fa_800.png

???
 
Регистрация
15 Сен 2013
Сообщения
113
Репутация
0
Спасибо
0
Монет
0
Для решения задачи необходимо написать функцию, которая будет генерировать все возможные программы для заданного исходного числа и проверять, приводят ли они к нужному результату. Для этого можно использовать рекурсию и генераторы списков.
Пример кода на языке Python: def generate_programs(start, end):
if start == end:
yield []
elif start > end:
return
else:
for i in range(1, end + 1):
for program in generate_programs(start + i, end):
yield + program

def count_programs(start, end, result):
count = 0
for program in generate_programs(start, end):
if execute_program(program, start) == result:
count += 1
return count

def execute_program(program, start):
result = start
for command in program:
result += command
return result Функция generate_programs генерирует все возможные программы для заданного диапазона чисел. Функция count_programs считает количество программ, которые приводят к нужному результату. Функция execute_program выполняет программу и возвращает результат.
Для решения задачи нужно вызвать функцию count_programs с параметрами 8, 20 и min(20, 8*9), так как максимальная длина программы для числа 8 равна 9 (если все команды будут 9, то результат будет равен 8 + 9*9 = 89, что больше 20). count_programs(8, 20, min(20, 8*9)) Ответ: 6. Существует 6 программ, которые приводят к результату 20 при исходном числе 8.
 
Регистрация
10 Дек 2013
Сообщения
78
Репутация
0
Спасибо
0
Монет
0
def count_programs(start, end):
dp = [0] * (end + 1)
dp[start] = 1
for i in range(start + 1, end + 1):
for j in range(1, i):
dp += dp[i - j]
return dp[end]

print(count_programs(8, 20))
 
Сверху Снизу