Форум » Выполнение и анализ алгоритмов для исполнителей » Задача 1750 » Ответить

Задача 1750

olga_maria: Здравствуйте. Задача №5, на сайте № 1750 Автомат обрабатывает натуральное число N < 256 по следующему алгоритму: 1) Строится восьмибитная двоичная запись числа N. 2) Инвертируются все разряды исходного числа, кроме последней единицы и стоящих за ней нулей (0 заменяется на 1, 1 на 0). 3) Полученное число переводится в десятичную систему счисления. Для какого значения N результат работы алгоритма равен 211? На сайте ответ 45, но и программным способом решала, и в ручную, но получается 44. Просьба пояснить, что делаю не так. Спасибо. Вариант 1. [pre2] for n in range(1,256): s = bin(n)[2:] if len(s) < 8: s = '0' * (8 - len(s)) + s s = s.replace('1', '*') s = s.replace('0', '1') s = s.replace('*', '0') if int(s, 2) == 211: print(n) [/pre2] Вариант 2. [pre2] for n in range(1, 256): s = "{:08b}".format(n) s = s.replace('1', '*') s = s.replace('0', '1') s = s.replace('*', '0') if int(s,2) == 211: print( n ) [/pre2]

Ответов - 2

Ж: Вы инвертируете все разряды, а надо только те, что стоят до последней единицы Инвертируются все разряды исходного числа, кроме последней единицы и стоящих за ней нулей (0 заменяется на 1, 1 на 0). [pre2] for n in range(1,256): s = bin(n)[2:].zfill(8) num=s.rindex('1') for i in range(num): if s=='1': s=s[:i]+'0'+s[i+1:] else: s=s[:i]+'1'+s[i+1:] if int(s, 2) == 211: print(n) [/pre2]

olga_maria: Спасибо!!! Видимо не умею читать



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