05 задание ЕГЭ информатика (Питон)

for a in range (1,43):
    k=a
    if k%2==0:
         k=k/2
    else:
         k=k-1
    if k%3==0:
         k=k/3
    else:
         k=k-1
    if k%7==0:
         k=k/7
    else:
         k=k-1
    if k==1:
         print(a)

for x in range(2,1000):
    n=bin(x)[2:]
    k1=0
    k0=0
    for i in range(1,len(n),2):
        k1+=int(n[i])
    for i in range (0,len(n),2):
        if n[i]='0':
            k0+=1
    if abs(k1-k0)==5:
        print(x)

Алгоритм получает на вход натуральное число ?>1 и строит по нему новое число ? следующим образом:

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

Пример. Дано число ?=19. Алгоритм работает следующим образом:

  1. Двоичная запись числа N: 10011.
  2. В полученной записи нулей меньше, чем единиц, в конец записи добавляется 0. Новая запись: 100110.
  3. В текущей записи нулей и единиц поровну, в конец записывается последняя цифра, это 0. Получается 1001100. В этой записи единиц меньше, в конец добавляется 1: 10011001.
  4. Результат работы алгоритма ?=153.

При каком наименьшем исходном числе ?>99 в результате работы алгоритма получится число, кратное 4?

def modify(st):
    (k0, k1)  = (st.count('0'), st.count('1'))
    if k0 == k1:
        st = st + st[-1]
    elif k0 > k1:
        st = st + '1'
    else:
        st = st + '0'
    return st
N = 99
while True:
    strN = bin(N)[2:]
    for _ in range(3):
        strN = modify(strN)
    R = int(strN, 2)
    if N > 99 and R % 4 == 0:
        print(N);
        break
    N += 1

Добавить комментарий