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

Задача 1789

uchitelka80: [quote]Автомат обрабатывает натуральное число N < 256 по следующему алгоритму: 1) Строится восьмибитная двоичная запись числа N. 2) Инвертируются все разряды исходного числа (0 заменяется на 1, 1 на 0). 3) Полученное число переводится в десятичную систему счисления. 4) Из нового числа вычитается исходное, полученная разность выводится на экран. Для какого значения N результат работы алгоритма равен 113?[/quote] Решаю аналитически (вручную), применяя алгоритм с конца. Ответ подобрала, но как его решать. а не догадываться, не могу понять. 4 пункт алгоритма ставит в тупик. Мое решение: Пусть новое число равно 184, тогда 3) 184 = 10111000 2) N = 01000111 1) N = 71 4) 184 - 71 = 113 Как знать наверняка, какое новое число нужно брать? Или может другой есть способ?

Ответов - 5

cabanov.alexey: Там фишка в том что сумма обычного и инвертированного числа всегда 11111111=255 То есть из числа N пункт 2 строит число 255-N В 4 пункте получаем разность 255-N - N = 113

sfa: [pre2]for n in range(1,256): s=bin(n)[2:] s=(8-len(s))*'0'+ s s1='' for x in s: if x=='1': s1 += '0' else: s1 += '1' if int(s1,2)-n==113: print(n) [/pre2]

s11kai: Как вариант: [pre2] for i in range(1,256): s = bin(i-1)[2:] while len(s)<8: s='0'+s s = s.replace('1', '2') s = s.replace('0', '1') s = s.replace('2', '0') if int(s,2) == 113: print(i,int(s,2)) break [/pre2]


s11kai: можно еще короче, например так: [pre2] for i in range(1,256): s = "{:08b}".format(i-1) s = s.replace('1', '2') s = s.replace('0', '1') s = s.replace('2', '0') if int(s,2) == 113: print(i) break [/pre2]

s11kai: 186) Автомат обрабатывает натуральное число N < 256 по следующему алгоритму: 1) Строится восьмибитная двоичная запись числа N. 2) Инвертируются все разряды исходного числа, кроме последней единицы и стоящих за ней нулей (0 заменяется на 1, 1 на 0). 3) Полученное число переводится в десятичную систему счисления. Чему равен результат работы алгоритма для N = 211? [pre2] for i in range(1,256): s = bin(i)[2:] while len(s)<8: s='0'+s ss = '' flag = 0 for j in s[::-1]: if flag == 0: if j == '1': flag = 1 ss = j + ss else: if j == '1': ss = '0' + ss else: ss = '1' + ss if int(ss,2) == 211: print(i) break [/pre2]



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