Автор | Сообщение |
|
Отправлено: 18.03.23 10:22. Заголовок: 3909
Здравствуйте, что-то не тек с ответом 480 1 получаем из него двоичную запись =111100000 2 тк 0 больше то дописываем 1 =1111000001 3 0 и 1 одинакова - то дописываем 1 = 11110000011 получили 1923 - Результат переводится в десятичную систему счисления. При каком наибольшем исходном числе N < 750 в результате работы алгоритма получится чётное число, которое не делится на 4? ДА оно не делится на 4, но не четное for i in range(750): n=bin(i)[2:] if n.count('1')==n.count('0'): n=n+n[-1] else: if n.count('1')>n.count('0'): n=n+'0' if n.count('1')<n.count('0'): n=n+'1' if n.count('1')==n.count('0'): n=n+n[-1] else: if n.count('1')>n.count('0'): n=n+'0' if n.count('1')<n.count('0'): n=n+'1' g=int(n,2) if g%2==0 and g%4!=0: print(i) получается 737
|
|
|
Ответов - 3
[только новые]
|
|
|
Отправлено: 18.03.23 23:23. Заголовок: 1) Строится двоичная..
цитата: | 1) Строится двоичная запись числа N. 2) Подсчитывается количество нулей и единиц в полученной записи. Если их количество одинаково, в конец записи добавляется её последняя цифра. В противном случае в конец записи добавляется цифра, которая встречается реже. 3) Шаг 2 повторяется ещё два раза. 4) Результат переводится в десятичную систему счисления. |
| 1) Строится двоичная запись числа N. 2) Повторить 3 раза: Подсчитывается количество нулей и единиц в полученной записи. Если их количество одинаково, в конец записи добавляется её последняя цифра. В противном случае в конец записи добавляется цифра, которая встречается реже. 4) Результат переводится в десятичную систему счисления.
|
|
|
|
Отправлено: 24.03.23 11:12. Заголовок: 988013@mail.ru пишет..
988013@mail.ru пишет: цитата: | Здравствуйте, что-то не тек с ответом 480 |
|
Можно примерно так: for N in range(749,1,-1): r = bin(N)[2:] if r.count('1')==r.count('0'):r = r + r[-1] elif r.count('1')>r.count('0'): r = r + '0' else: r = r+'1' if r.count('1')==r.count('0'):r = r + r[-1] elif r.count('1')>r.count('0'): r = r + '0' else: r = r+'1' if r.count('1')==r.count('0'):r = r + r[-1] elif r.count('1')>r.count('0'): r = r + '0' else: r = r+'1' R = int(r,2) if R%2 == 0 and R%4!= 0: print(N) break
|
|
|
|
Отправлено: 24.03.23 11:20. Заголовок: А так будет и короче..
А так будет и короче, и, понятнее def f(N): r = bin(N)[2:] for i in range(3): if r.count('1')==r.count('0'):r = r + r[-1] elif r.count('1')>r.count('0'): r = r + '0' else: r = r+'1' return int(r,2) for N in range(749,1,-1): if f(N)%2 == 0 and f(N)%4!= 0: print(N) break
|
|
|
|