Задача к ЕГЭ по информатике на тему «Запись числа в двоичной системе счисления» №21

МС получает на вход натуральное число 1 » class=»math» src=»/images/inform/quest/quest-3261-1.svg» width=»auto»> и строит по нему новое число R  следующим образом:

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

При каком наибольшем исходном числе <img alt="N в результате работы алгоритма получается нечетное число, которое делится на 7  ?

Решение 1

for i in range(1023, 1, -1):
    s = bin(i)[2:] # Внизу отказ от ИВ
    s += s[-1] * (s.count(’0’) == s.count(’1’)) + 
    ’1’ * (s.count(’1’) < s.count(’0’)) + ’0’ * (s.count(’0’) < s.count(’1’))
    s += s[-1] * (s.count(’0’) == s.count(’1’)) + 
    ’1’ * (s.count(’1’) < s.count(’0’)) + ’0’ * (s.count(’0’) < s.count(’1’))
    s += s[-1] * (s.count(’0’) == s.count(’1’)) + 
    ’1’ * (s.count(’1’) < s.count(’0’)) + ’0’ * (s.count(’0’) < s.count(’1’))
    if int(s, 2) % 2 != 0 and int(s, 2) % 7 == 0:
        print(i)
        break

Решение 2

for i in range(1023, 1, -1):
    s = bin(i)[2:]
    for j in range(3):
        k = s.count(’1’) - s.count(’0’)
        if (k < 0):
            s += ’1’
        elif (k > 0):
            s += ’0’
        else:
            s += s[-1]
    if int(s, 2) % 2 != 0 and int(s, 2) % 7 == 0:
        print(i)
        break

Ответ: 914
Оцените статью
Я решу все!