Алгоритм переводит число N в двоичную запись, дописывает к ней цифры по правилу и получает число R. Нужно найти N или R с заданным свойством.
Что нужно знать
Перевод в двоичную: bin(n)[2:], обратно: int(s, 2).
Дописать цифры в конец — это сложить строки: s + '01'.
Количество единиц: s.count('1').
Как решать
Записать алгоритм функцией R(n) на Python, строго по условию.
Проверить функцию на примерах из условия.
Перебрать N и выбрать нужное: минимальное, максимальное или минимальное R.
Типичные ошибки
Пропустить проверку на примерах — ошибка в правиле даёт неверный ответ.
Перепутать «не меньшее» (≥) и «большее» (>).
Ответить N, когда спрашивают R, и наоборот.
Разобранные варианты
Сначала реши сам, потом открой разбор. В каждом разборе есть программа на Python.
Вариант 1
минимальное N
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится двоичная запись числа N. 2. Далее эта запись обрабатывается по следующему правилу: а) если число N делится на 3, то к этой записи дописываются её три последние двоичные цифры; б) если число N на 3 не делится, то остаток от деления умножается на 3, переводится в двоичную запись и дописывается в конец числа. Полученная таким образом запись является двоичной записью искомого числа R. 3. Результат переводится в десятичную систему и выводится на экран. Например, 2810 = 111002 → 11100112 = 11510, а 1110 = 10112 → 10111102 = 9410. Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, не меньшее 435.
Разбор
Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.
Шаг 2. Перебираем N рядом с границей и ищем R ≥ 435:
N
N в двоичной
R в двоичной
R
51
110011
110011011
411
52
110100
11010011
211
53
110101
110101110
430
54
110110
110110110
438
55
110111
11011111
223
56
111000
111000110
454
57
111001
111001001
457
Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.
Ответ: 54
Решение на Python.
def R(n):
s = bin(n)[2:]
if n % 3 == 0:
s = s + s[-3:]
else:
s = s + bin(n % 3 * 3)[2:]
return int(s, 2)
for n in range(4, 100000):
if R(n) >= 435:
print(n)
break
Вариант 2
минимальное N
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится двоичная запись числа N. 2. Далее эта запись обрабатывается по следующему правилу: а) к этой записи дописывается справа бит чётности: 0, если в двоичной записи числа N чётное число единиц, и 1, если нечётное; б) к полученной записи справа дописывается ещё один бит чётности, вычисленный уже для новой записи. Полученная таким образом запись является двоичной записью искомого числа R. 3. Результат переводится в десятичную систему и выводится на экран. Например, 2810 = 111002 → 11100102 = 11410, а 2110 = 101012 → 10101102 = 8610. Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, большее 763.
Разбор
Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.
Шаг 2. Перебираем N рядом с границей и ищем R > 763:
N
N в двоичной
R в двоичной
R
188
10111100
1011110010
754
189
10111101
1011110100
756
190
10111110
1011111000
760
191
10111111
1011111110
766
192
11000000
1100000000
768
193
11000001
1100000110
774
194
11000010
1100001010
778
Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.
Ответ: 191
Решение на Python.
def R(n):
s = bin(n)[2:]
s = s + str(s.count('1') % 2)
s = s + str(s.count('1') % 2)
return int(s, 2)
for n in range(1, 100000):
if R(n) > 763:
print(n)
break
Вариант 3
минимальное N
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится двоичная запись числа N. 2. Далее эта запись обрабатывается по следующему правилу: а) если количество единиц в двоичной записи чётное, то в конец записи дописывается 0, а в начало — 10; б) если количество единиц нечётное, то в конец записи дописывается 1, а в начало — 11. Полученная таким образом запись является двоичной записью искомого числа R. 3. Результат переводится в десятичную систему и выводится на экран. Например, 2610 = 110102 → 111101012 = 24510, а 1610 = 100002 → 111000012 = 22510. Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, не меньшее 596.
Разбор
Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.
Шаг 2. Перебираем N рядом с границей и ищем R ≥ 596:
N
N в двоичной
R в двоичной
R
61
111101
111111011
507
62
111110
111111101
509
63
111111
101111110
382
64
1000000
1110000001
897
65
1000001
1010000010
642
66
1000010
1010000100
644
67
1000011
1110000111
903
Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.
Ответ: 64
Решение на Python.
def R(n):
s = bin(n)[2:]
if s.count('1') % 2 == 0:
s = '10' + s + '0'
else:
s = '11' + s + '1'
return int(s, 2)
for n in range(1, 100000):
if R(n) >= 596:
print(n)
break
Вариант 4
минимальное R
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится двоичная запись числа N. 2. Далее эта запись обрабатывается по следующему правилу: а) если число N делится на 4, то к этой записи дописываются её две последние двоичные цифры; б) если число N на 4 не делится, то остаток от деления на 4 умножается на 2, переводится в двоичную запись и дописывается в конец числа. Полученная таким образом запись является двоичной записью искомого числа R. 3. Результат переводится в десятичную систему и выводится на экран. Например, 710 = 1112 → 1111102 = 6210, а 1810 = 100102 → 100101002 = 14810. Укажите минимальное число R, которое превышает число 1154 и может являться результатом работы данного алгоритма. В ответе это число запишите в десятичной системе счисления.
Разбор
Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.
Шаг 2. Перебираем N рядом с границей и ищем R > 1154:
N
N в двоичной
R в двоичной
R
139
10001011
10001011110
1118
280
100011000
10001100000
1120
281
100011001
10001100110
1126
284
100011100
10001110000
1136
142
10001110
10001110100
1140
285
100011101
10001110110
1142
143
10001111
10001111110
1150
288
100100000
10010000000
1152
Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.
Ответ: 1158
Решение на Python.
def R(n):
s = bin(n)[2:]
if n % 4 == 0:
s = s + s[-2:]
else:
s = s + bin(n % 4 * 2)[2:]
return int(s, 2)
print(min(R(n) for n in range(4, 100000) if R(n) > 1154))
Вариант 5
минимальное N
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится двоичная запись числа N. 2. Далее эта запись обрабатывается по следующему правилу: а) если число N чётное, то в конец записи дописываются две её первые цифры; б) если число N нечётное, то в конец записи дописывается 1, а затем ещё один бит: остаток от деления количества единиц в новой записи на 2. Полученная таким образом запись является двоичной записью искомого числа R. 3. Результат переводится в десятичную систему и выводится на экран. Например, 1310 = 11012 → 1101102 = 5410, а 410 = 1002 → 100102 = 1810. Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, не меньшее 614.
Разбор
Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.
Шаг 2. Перебираем N рядом с границей и ищем R ≥ 614:
N
N в двоичной
R в двоичной
R
150
10010110
1001011010
602
151
10010111
1001011110
606
152
10011000
1001100010
610
153
10011001
1001100111
615
154
10011010
1001101010
618
155
10011011
1001101110
622
156
10011100
1001110010
626
Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.
Ответ: 153
Решение на Python.
def R(n):
s = bin(n)[2:]
if n % 2 == 0:
s = s + s[:2]
else:
s = s + '1'
s = s + str(s.count('1') % 2)
return int(s, 2)
for n in range(2, 100000):
if R(n) >= 614:
print(n)
break
Вариант 6
минимальное R
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится двоичная запись числа N. 2. Далее эта запись обрабатывается по следующему правилу: а) к этой записи дописывается справа бит чётности: 0, если в двоичной записи числа N чётное число единиц, и 1, если нечётное; б) к полученной записи справа дописывается ещё один бит чётности, вычисленный уже для новой записи. Полученная таким образом запись является двоичной записью искомого числа R. 3. Результат переводится в десятичную систему и выводится на экран. Например, 710 = 1112 → 111102 = 3010, а 2310 = 101112 → 10111002 = 9210. Укажите минимальное число R, которое превышает число 1107 и может являться результатом работы данного алгоритма. В ответе это число запишите в десятичной системе счисления.
Разбор
Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.
Шаг 2. Перебираем N рядом с границей и ищем R > 1107:
N
N в двоичной
R в двоичной
R
267
100001011
10000101100
1068
268
100001100
10000110010
1074
269
100001101
10000110100
1076
270
100001110
10000111000
1080
271
100001111
10000111110
1086
272
100010000
10001000000
1088
273
100010001
10001000110
1094
274
100010010
10001001010
1098
Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.
Ответ: 1108
Решение на Python.
def R(n):
s = bin(n)[2:]
s = s + str(s.count('1') % 2)
s = s + str(s.count('1') % 2)
return int(s, 2)
print(min(R(n) for n in range(1, 100000) if R(n) > 1107))
Вариант 7
максимальное N
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится двоичная запись числа N. 2. Далее эта запись обрабатывается по следующему правилу: а) если число N делится на 3, то к этой записи дописываются её три последние двоичные цифры; б) если число N на 3 не делится, то остаток от деления умножается на 3, переводится в двоичную запись и дописывается в конец числа. Полученная таким образом запись является двоичной записью искомого числа R. 3. Результат переводится в десятичную систему и выводится на экран. Например, 1210 = 11002 → 11001002 = 10010, а 910 = 10012 → 10010012 = 7310. Укажите максимальное число N, после обработки которого с помощью этого алгоритма получается число R, меньшее 80.
Разбор
Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.
Шаг 2. Перебираем N рядом с границей и ищем R < 80:
N
N в двоичной
R в двоичной
R
16
10000
1000011
67
17
10001
10001110
142
18
10010
10010010
146
19
10011
1001111
79
20
10100
10100110
166
21
10101
10101101
173
22
10110
1011011
91
Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.
Ответ: 19
Решение на Python.
def R(n):
s = bin(n)[2:]
if n % 3 == 0:
s = s + s[-3:]
else:
s = s + bin(n % 3 * 3)[2:]
return int(s, 2)
print(max(n for n in range(4, 100000) if R(n) < 80))
Вариант 8
минимальное R
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится двоичная запись числа N. 2. Далее эта запись обрабатывается по следующему правилу: а) если количество единиц в двоичной записи чётное, то в конец записи дописывается 0, а в начало — 10; б) если количество единиц нечётное, то в конец записи дописывается 1, а в начало — 11. Полученная таким образом запись является двоичной записью искомого числа R. 3. Результат переводится в десятичную систему и выводится на экран. Например, 2610 = 110102 → 111101012 = 24510, а 810 = 10002 → 11100012 = 11310. Укажите минимальное число R, которое превышает число 732 и может являться результатом работы данного алгоритма. В ответе это число запишите в десятичной системе счисления.
Разбор
Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.
Шаг 2. Перебираем N рядом с границей и ищем R > 732:
N
N в двоичной
R в двоичной
R
92
1011100
1010111000
696
95
1011111
1010111110
702
96
1100000
1011000000
704
99
1100011
1011000110
710
101
1100101
1011001010
714
102
1100110
1011001100
716
105
1101001
1011010010
722
106
1101010
1011010100
724
Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.
Ответ: 734
Решение на Python.
def R(n):
s = bin(n)[2:]
if s.count('1') % 2 == 0:
s = '10' + s + '0'
else:
s = '11' + s + '1'
return int(s, 2)
print(min(R(n) for n in range(1, 100000) if R(n) > 732))
Вариант 9
минимальное N
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится двоичная запись числа N. 2. Далее эта запись обрабатывается по следующему правилу: а) если число N делится на 4, то к этой записи дописываются её две последние двоичные цифры; б) если число N на 4 не делится, то остаток от деления на 4 умножается на 2, переводится в двоичную запись и дописывается в конец числа. Полученная таким образом запись является двоичной записью искомого числа R. 3. Результат переводится в десятичную систему и выводится на экран. Например, 1310 = 11012 → 1101102 = 5410, а 2410 = 110002 → 11000002 = 9610. Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, не меньшее 368.
Разбор
Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.
Шаг 2. Перебираем N рядом с границей и ищем R ≥ 368:
N
N в двоичной
R в двоичной
R
43
101011
101011110
350
44
101100
10110000
176
45
101101
10110110
182
46
101110
101110100
372
47
101111
101111110
382
48
110000
11000000
192
49
110001
11000110
198
Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.
Ответ: 46
Решение на Python.
def R(n):
s = bin(n)[2:]
if n % 4 == 0:
s = s + s[-2:]
else:
s = s + bin(n % 4 * 2)[2:]
return int(s, 2)
for n in range(4, 100000):
if R(n) >= 368:
print(n)
break
Вариант 10
максимальное N
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится двоичная запись числа N. 2. Далее эта запись обрабатывается по следующему правилу: а) если число N чётное, то в конец записи дописываются две её первые цифры; б) если число N нечётное, то в конец записи дописывается 1, а затем ещё один бит: остаток от деления количества единиц в новой записи на 2. Полученная таким образом запись является двоичной записью искомого числа R. 3. Результат переводится в десятичную систему и выводится на экран. Например, 910 = 10012 → 1001112 = 3910, а 810 = 10002 → 1000102 = 3410. Укажите максимальное число N, после обработки которого с помощью этого алгоритма получается число R, меньшее 476.
Разбор
Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.
Шаг 2. Перебираем N рядом с границей и ищем R < 476:
N
N в двоичной
R в двоичной
R
115
1110011
111001110
462
116
1110100
111010011
467
117
1110101
111010110
470
118
1110110
111011011
475
119
1110111
111011111
479
120
1111000
111100011
483
121
1111001
111100110
486
Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.
Ответ: 118
Решение на Python.
def R(n):
s = bin(n)[2:]
if n % 2 == 0:
s = s + s[:2]
else:
s = s + '1'
s = s + str(s.count('1') % 2)
return int(s, 2)
print(max(n for n in range(2, 100000) if R(n) < 476))
Для самостоятельного решения
Варианты 11–15 без разборов. Ответ можно проверить кнопкой.
Вариант 11
минимальное R
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится двоичная запись числа N. 2. Далее эта запись обрабатывается по следующему правилу: а) если число N делится на 3, то к этой записи дописываются её три последние двоичные цифры; б) если число N на 3 не делится, то остаток от деления умножается на 3, переводится в двоичную запись и дописывается в конец числа. Полученная таким образом запись является двоичной записью искомого числа R. 3. Результат переводится в десятичную систему и выводится на экран. Например, 2710 = 110112 → 110110112 = 21910, а 2110 = 101012 → 101011012 = 17310. Укажите минимальное число R, которое превышает число 1105 и может являться результатом работы данного алгоритма. В ответе это число запишите в десятичной системе счисления.
Вариант 12
максимальное N
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится двоичная запись числа N. 2. Далее эта запись обрабатывается по следующему правилу: а) к этой записи дописывается справа бит чётности: 0, если в двоичной записи числа N чётное число единиц, и 1, если нечётное; б) к полученной записи справа дописывается ещё один бит чётности, вычисленный уже для новой записи. Полученная таким образом запись является двоичной записью искомого числа R. 3. Результат переводится в десятичную систему и выводится на экран. Например, 1710 = 100012 → 10001002 = 6810, а 2710 = 110112 → 11011002 = 10810. Укажите максимальное число N, после обработки которого с помощью этого алгоритма получается число R, меньшее 756.
Вариант 13
минимальное N
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится двоичная запись числа N. 2. Далее эта запись обрабатывается по следующему правилу: а) если количество единиц в двоичной записи чётное, то в конец записи дописывается 0, а в начало — 10; б) если количество единиц нечётное, то в конец записи дописывается 1, а в начало — 11. Полученная таким образом запись является двоичной записью искомого числа R. 3. Результат переводится в десятичную систему и выводится на экран. Например, 1810 = 100102 → 101001002 = 16410, а 2110 = 101012 → 111010112 = 23510. Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, большее 398.
Вариант 14
максимальное N
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится двоичная запись числа N. 2. Далее эта запись обрабатывается по следующему правилу: а) если число N делится на 4, то к этой записи дописываются её две последние двоичные цифры; б) если число N на 4 не делится, то остаток от деления на 4 умножается на 2, переводится в двоичную запись и дописывается в конец числа. Полученная таким образом запись является двоичной записью искомого числа R. 3. Результат переводится в десятичную систему и выводится на экран. Например, 1010 = 10102 → 10101002 = 8410, а 710 = 1112 → 1111102 = 6210. Укажите максимальное число N, после обработки которого с помощью этого алгоритма получается число R, меньшее 707.
Вариант 15
минимальное R
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится двоичная запись числа N. 2. Далее эта запись обрабатывается по следующему правилу: а) если число N чётное, то в конец записи дописываются две её первые цифры; б) если число N нечётное, то в конец записи дописывается 1, а затем ещё один бит: остаток от деления количества единиц в новой записи на 2. Полученная таким образом запись является двоичной записью искомого числа R. 3. Результат переводится в десятичную систему и выводится на экран. Например, 1510 = 11112 → 1111112 = 6310, а 1010 = 10102 → 1010102 = 4210. Укажите минимальное число R, которое превышает число 191 и может являться результатом работы данного алгоритма. В ответе это число запишите в десятичной системе счисления.