Напишите программу на Python'е для решения следующей задачи:
Исполнитель НечетМ преобразует число на экране. У исполнителя НечетМ две команды, которым присвоены номера:
1. прибавь 1
2. сделай нечётное
Первая из этих команд увеличивает число x на экране на 1, вторая переводит число x в число 2x+1. Например, вторая команда переводит число 10 в число 21. Программа для исполнителя НечетМ – это последовательность команд. Сколько существует таких программ, которые число 1 преобразуют в число 27, причём траектория вычислений не содержит число 26? Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы 121 при исходном числе 7 траектория будет состоять из чисел 8, 17, 18.
damskiyugodnik43:
не копировал я с решу егэ
это тоже самое что дать задачу, и если у человека получился правильный ответ, то сказать: "ого, у тебя ответ совпал с ответом составителя, значит ты списал"
логика - железо
и вообще ты, что, один цикл на питоне написать не можешь?
damskiyugodnik43, существует много способов решить данное задание, но почему же алгоритм схож с решу егэ, да и вообще, я просил полную программу, а не лишь куски.
посмотри на его ник
знаю только два ЭФФЕКТИВНЫХ способа: динамика и рекурсия(что в принципе тоже самое), в шкиле всегда дают первый вариант, поэтому его я и ресурсы по подготовке и описывают
damskiyugodnik43, диалог с вами я считаю бесполезным.
полезно только всех, у кого правильные мысли обвинять в списывании, ок, понял
damskiyugodnik43, о списывании речь не шла.
Ответы
Ответ дал:
2
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)
Меньше г-кода
от уменьшения количества г-кода, его качество не увеличивается
возьми место 27 число 10000 и посмотри по времени работы
a = 1
res = 0
def pr(x):
if x == 10000:
global res
res+=1
elif x<27:
if x+1 !=26:
pr(x+1)
if 2*x+1 != 26:
pr(2*x+1)
pr(1)
print(res)
res = 0
def pr(x):
if x == 10000:
global res
res+=1
elif x<27:
if x+1 !=26:
pr(x+1)
if 2*x+1 != 26:
pr(2*x+1)
pr(1)
print(res)
def F(x, y):
if x == y: return 1
if x > y or x == 26: return 0
return F(x+1, y) + F(2*x+1, y)
print(F(1, 10000))
if x == y: return 1
if x > y or x == 26: return 0
return F(x+1, y) + F(2*x+1, y)
print(F(1, 10000))
затести время работы
Моя программа отличается от твоей простотой, как говорится, что видишь, то и пишешь, никто такое большое значение давать не будет на экзамене, даже, если даст, можно поставить мою программу, пусть грузится, и перейти к другому заданию
Но я не против твоего решения, как вариант можно, но я нашёл то что для меня проще
она как раз простотой и не отличается, она красивее, но и не более того, как была г-кодом так и остался
И не поспоришь
Вас заинтересует
2 года назад
2 года назад
2 года назад
8 лет назад
9 лет назад