Форум » Динамическое программирование » 23-137 » Ответить

23-137

AnnaPershina: Подскажите,пожалуйста, в чем ошибка.3 137) (А. Комков) Исполнитель Нолик преобразует двоичное число, записанное на экране. У исполнителя есть две команды, которым присвоены номера: 1. Вычесть 1 2. Обнулить Первая команда уменьшает число на 1. Вторая команда обнуляет все ненулевые разряды, кроме старшего (например, для исходного числа 11101 результатом работы команды будет число 10000), если таких разрядов нет, то данная команда не выполняется. Сколько существует программ, которые исходное двоичное число 1100 преобразуют в двоичное число 100? [pre2] def f(x,y): if x==y: return 1 if x>y: return f(x-1,y)+f(2**(len(bin(x)[2:])-1),y) if x<y: return 0 print(int('1100',2)) print(int('100',2)) print(f(12,4)) [/pre2]

Ответов - 4

MrAndrewson: если таких разрядов нет, то данная команда не выполняется.

AnnaPershina: Спасибо огромное!!!

AnnaPershina: [pre2] def f(x,y): if x==y: return 1 if x>y: if x!=8 : return f(x-1,y)+f(2**(len(bin(x)[2:])-1),y) else: return f(x-1,y) if x<y: return 0 print(f(12,4)) [/pre2] Спасибо большое!


flo23: def f(x,y): if x==y: return 1 if x>y: if x!=8 : return f(x-1,y)+f(x-int(bin(x)[3:],2),y) else: return f(x-1,y) if x<y: return 0 print(f(12,4))



полная версия страницы