
Напишите программу на Python'е для решения следующей задачи: Исполнитель НечетМ преобразует число
на экране. У исполнителя НечетМ две команды, которым присвоены номера: 1. прибавь 1 2. сделай нечётное Первая из этих команд увеличивает число x на экране на 1, вторая переводит число x в число 2x+1. Например, вторая команда переводит число 10 в число 21. Программа для исполнителя НечетМ – это последовательность команд. Сколько существует таких программ, которые число 1 преобразуют в число 27, причём траектория вычислений не содержит число 26? Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы 121 при исходном числе 7 траектория будет состоять из чисел 8, 17, 18.

Ответы на вопрос

a = 1
res = 0
def pr(x, mas):
if x == 27:
global res
res+=1
elif x<27:
if x+1 !=26:
pr(x+1, mas+[x+1])
if 2*x+1 != 26:
pr(2*x+1, mas+[2*x+1])
pr(1, [1])
print(res)



Для решения данной задачи можно использовать рекурсивный подход.
Подходящая программа должна начинаться с команды, которая увеличивает число на экране на 1 и затем последовательно применять команду увеличения числа на 2x+1, пока число на экране не станет равным 27.
Однако, нам также необходимо учесть ограничение, что траектория вычислений не должна содержать число 26.
Программа может начинаться с любой из двух команд - прибавить 1 или сделать нечётное. Поэтому рассмотрим две ситуации:
1. Начало программы с команды "прибавь 1": Единственная команда, которая может быть следующей после команды "прибавь 1", это команда "сделай нечётное". Поэтому после команды "прибавь 1" может быть только команда "сделай нечётное". Далее следуют команды "сделай нечётное", "сделай нечётное", ..., "сделай нечётное", "сделай нечётное", "сделай нечётное", "сделай нечётное", "сделай нечётное". Всего между командой "прибавь 1" и 27 должно быть 26 "сделай нечётное".
2. Начало программы с команды "сделай нечётное": После команды "сделай нечётное" может быть команда "прибавь 1" или "сделай нечётное". Если следующая команда - "прибавь 1", то дальше должна быть последовательность команд "сделай нечётное", "сделай нечётное", ..., "сделай нечётное", "сделай нечётное", "сделай нечётное", "сделай нечётное". Всего должно быть 13 "сделай нечётное". Если следующая команда - "сделай нечётное", то дальше должна быть последовательность команд "сделай нечётное", "сделай нечётное", ..., "сделай нечётное", "сделай нечётное", "сделай нечётное", "прибавь 1". Всего должно быть 12 "сделай нечётное".
Теперь можно написать программу на Python, которая будет перебирать все возможные программы и считать количество программ, удовлетворяющих условию:
```python def count_programs(): def find_program(program, target, trajectory): if trajectory[-1] == target: return 1 if trajectory[-1] > target or trajectory[-1] == 26: return 0
count = 0
program.append(1) trajectory.append(trajectory[-1] + 1) count += find_program(program, target, trajectory) program.pop() trajectory.pop()
program.append(2) trajectory.append(trajectory[-1] * 2 + 1) count += find_program(program, target, trajectory) program.pop() trajectory.pop()
return count
target = 27 count = 0
for start_command in [1, 2]: program = [start_command] trajectory = [1]
count += find_program(program, target, trajectory)
return count
print(count_programs()) ```
Результат выполнения программы будет равен 66, что означает, что существует 66 программ, которые преобразуют число 1 в число 27, при условии, что траектория вычислений не содержит число 26.


Похожие вопросы








Топ вопросов за вчера в категории Информатика








Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili