Задание 5 ЕГЭ: анализ алгоритма для исполнителя
В двоичную — готовыми средствами:
s = f'{n:b}' # или bin(n)[2:] — срез убирает приставку '0b'
В троичную готовой функции нет — пишем подпрограмму:
def to3(n):
s = ''
while n > 0:
s = str(n % 3) + s
n = n // 3
return s
Обратно — int(s, 2) и int(s, 3).
best = 10 ** 9 # ищем наименьшее: больше любого R
for n in range(1, 1001): # на проверке — range(1, 101)
s = f'{n:b}'
if n % 2 == 0: # признак из условия
t = '11' + s + '11' # ветка а
else:
t = '1' + s + '00' # ветка б
r = int(t, 2)
#print(n, s, t, r) # снять решётку и сверить с примером
if r > 95 and r < best: # строка отбора
best = r
print(best)
Правило демоверсии 2027, вопрос «наименьшее R больше 95»: печатает 100.
Сперва, ещё без строки отбора, — маленький диапазон и
открытая печать: print(n, s, t, r) даёт число,
запись, достройку и результат, а ста строк хватает, чтобы след
читался глазами.
Примеров в условии всегда два — по одному на ветку (в демоверсии 6 → 123 и 13 → 116). Находим в следе обе строки: одного примера мало, ошибка в другой ветке им не ловится. Сошлись обе — правило прочитано верно, печать закомментировать (не стирать!), диапазон вернуть к 1001.
| Спрашивают | Вначале — наоборот | В цикле |
|---|---|---|
| наименьшее R больше T | best = 10 ** 9 |
if r > T and r < best: best = r |
| то же, но нечётное R | добавить and r % 2 == 1 | |
| наибольшее R не больше T | best = 0 |
if r <= T and r > best: best = r |
| наименьшее N с R ≥ T | best = 10 ** 9 |
if r >= T and n < best: best = n |
| наибольшее N с R ≤ T | best = 0 |
if r <= T and n > best: best = n |
| наибольшее N, R ближе всего к T | dist = 10 ** 9 |
d = abs(r - T), затем
if d <= dist: dist = d; best = n |
print на range(1, 101) —
сверить с обоими примерами из условия (они на разные ветки).best = n или
best = r — самая частая потеря балла;>= и >,
разные знаки;Задание 5 ЕГЭ: анализ алгоритма для исполнителя
В двоичную — готовыми средствами:
s = f'{n:b}' # или bin(n)[2:] — срез убирает приставку '0b'
В троичную готовой функции нет — пишем подпрограмму:
def to3(n):
s = ''
while n > 0:
s = str(n % 3) + s
n = n // 3
return s
Обратно — int(s, 2) и int(s, 3).
best = 10 ** 9 # ищем наименьшее: больше любого R
for n in range(1, 1001): # на проверке — range(1, 101)
s = f'{n:b}'
if n % 2 == 0: # признак из условия
t = '11' + s + '11' # ветка а
else:
t = '1' + s + '00' # ветка б
r = int(t, 2)
#print(n, s, t, r) # снять решётку и сверить с примером
if r > 95 and r < best: # строка отбора
best = r
print(best)
Правило демоверсии 2027, вопрос «наименьшее R больше 95»: печатает 100.
Сперва, ещё без строки отбора, — маленький диапазон и
открытая печать: print(n, s, t, r) даёт число,
запись, достройку и результат, а ста строк хватает, чтобы след
читался глазами.
Примеров в условии всегда два — по одному на ветку (в демоверсии 6 → 123 и 13 → 116). Находим в следе обе строки: одного примера мало, ошибка в другой ветке им не ловится. Сошлись обе — правило прочитано верно, печать закомментировать (не стирать!), диапазон вернуть к 1001.
| Спрашивают | Вначале — наоборот | В цикле |
|---|---|---|
| наименьшее R больше T | best = 10 ** 9 |
if r > T and r < best: best = r |
| то же, но нечётное R | добавить and r % 2 == 1 | |
| наибольшее R не больше T | best = 0 |
if r <= T and r > best: best = r |
| наименьшее N с R ≥ T | best = 10 ** 9 |
if r >= T and n < best: best = n |
| наибольшее N с R ≤ T | best = 0 |
if r <= T and n > best: best = n |
| наибольшее N, R ближе всего к T | dist = 10 ** 9 |
d = abs(r - T), затем
if d <= dist: dist = d; best = n |
print на range(1, 101) —
сверить с обоими примерами из условия (они на разные ветки).best = n или
best = r — самая частая потеря балла;>= и >,
разные знаки;