Top.Mail.Ru
Ответы
Аватар пользователя
5мес
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

Помогите, пожалуйста, с информатикой. 5 задание егэ

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
2. Далее
1. Строится двоичная запись числа N.
если исходное число чётное, то справа к построенной двоичной записи
числа N приписывается 0, если нечётное, то приписывается 1.
3. Далее полученная на втором шаге алгоритма запись обрабатывается по следующему правилу:
a) если количество единиц в двоичной записи кратно трём, то в этой записи два левых разряда заменяются на 11;
б) если количество единиц в двоичной записи некратно трём, то в этой записи два левых разряда заменяются на 10.
Полученная таким образом запись является двоичной записью искомого числа R.
Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, не меньшее, чем 26. В ответе запишите это число в десятичной системе счисления.

По дате
По рейтингу
Аватар пользователя
Новичок
5мес
1234
 26 -> 11010 -> 5 двоичный разядов, минимально возможное N = 8
перебираем:
8 -> 1000 -> 1000|0 -> 10|000 -> 16 не подходит
9 -> 1001 -> 1001|1 -> 11|011 -> 27 подходит 

Ответ: 9

Но если хочешь кодом, то:

1234
 for i in range(8, 17):
    s = bin(i)[2:] + '01'[i % 2]
    if int(['10', '11'][s.count('1') % 3 == 0] + s[2:], 2) >= 26: break
print(i) 
Аватар пользователя
5мес
1234567891011121314151617
 for N in range(1, 200): # от 1, потому что в задании написано натуральное число
    N_2 = bin(N)[2:] # перевод в двоичную
    if N_2[-1] == '0':
        N_2 = N_2 + '0'
    else:
        N_2 = N_2 + '1'
    
    if N_2.count('1') % 3 == 0:
        N_2 = '1111' + N_2[2:]
    else:
        N_2 = '1010' + N_2[2:]
    R = int(N_2, 2) # перевод в 10чную систему
    if R >= 26:
        print(N)
    
    
     

Хз чет я не уверен в верности. Если у тебя есть ответ, посмотри, правильно ли я сделал

Аватар пользователя
Мыслитель
5мес
123456
 for n in range(1,9999): 
    s=bin(n)[2:]+('0'if n%2==0 else'1') 
    s=('11'if s.count('1')%3==0 else'10')+s[2:] 
    if int(s,2)>=26: 
        print(n) 
        break