Автор | Сообщение |
|
Отправлено: 12.11.21 15:30. Заголовок: Задача 1789
цитата: | Автомат обрабатывает натуральное число N < 256 по следующему алгоритму: 1) Строится восьмибитная двоичная запись числа N. 2) Инвертируются все разряды исходного числа (0 заменяется на 1, 1 на 0). 3) Полученное число переводится в десятичную систему счисления. 4) Из нового числа вычитается исходное, полученная разность выводится на экран. Для какого значения N результат работы алгоритма равен 113? |
| Решаю аналитически (вручную), применяя алгоритм с конца. Ответ подобрала, но как его решать. а не догадываться, не могу понять. 4 пункт алгоритма ставит в тупик. Мое решение: Пусть новое число равно 184, тогда 3) 184 = 10111000 2) N = 01000111 1) N = 71 4) 184 - 71 = 113 Как знать наверняка, какое новое число нужно брать? Или может другой есть способ?
|
|
|
Ответов - 5
[только новые]
|
|
|
Отправлено: 12.11.21 17:07. Заголовок: Там фишка в том что ..
Там фишка в том что сумма обычного и инвертированного числа всегда 11111111=255 То есть из числа N пункт 2 строит число 255-N В 4 пункте получаем разность 255-N - N = 113
|
|
|
|
Отправлено: 18.06.22 16:14. Заголовок: for n in range(1,256..
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)
|
|
|
|
Отправлено: 12.01.23 05:16. Заголовок: Как вариант: for i ..
Как вариант: 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
|
|
|
|
Отправлено: 12.01.23 05:18. Заголовок: можно еще короче, на..
можно еще короче, например так: 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
|
|
|
|
Отправлено: 12.01.23 09:43. Заголовок: а вот еще интереснее задачка
186) Автомат обрабатывает натуральное число N < 256 по следующему алгоритму: 1) Строится восьмибитная двоичная запись числа N. 2) Инвертируются все разряды исходного числа, кроме последней единицы и стоящих за ней нулей (0 заменяется на 1, 1 на 0). 3) Полученное число переводится в десятичную систему счисления. Чему равен результат работы алгоритма для N = 211? 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
|
|
|
|