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

3909

988013@mail.ru: Здравствуйте, что-то не тек с ответом 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

Aleksey6819: 1) Строится двоичная запись числа N. 2) Подсчитывается количество нулей и единиц в полученной записи. Если их количество одинаково, в конец записи добавляется её последняя цифра. В противном случае в конец записи добавляется цифра, которая встречается реже. 3) Шаг 2 повторяется ещё два раза. 4) Результат переводится в десятичную систему счисления. 1) Строится двоичная запись числа N. 2) Повторить 3 раза: Подсчитывается количество нулей и единиц в полученной записи. Если их количество одинаково, в конец записи добавляется её последняя цифра. В противном случае в конец записи добавляется цифра, которая встречается реже. 4) Результат переводится в десятичную систему счисления.

s11kai: 988013@mail.ru пишет: Здравствуйте, что-то не тек с ответом 480 Можно примерно так: [pre2] 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 [/pre2]

s11kai: А так будет и короче, и, понятнее [pre2] 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 [/pre2]




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