🎉 Добавлен материал по 9 заданию
ЕГЭ
Задания
Задание 5
12721

Задание 12721

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

  1. Строится восьмеричная запись числа N.

  2. Далее эта запись обрабатывается по следующему правилу:

    • а) если количество чётных цифр в записи числа нечётно, то к трём последним разрядам восьмеричной записи справа дописывается 46
    • б) если количество чётных цифр в записи числа чётно, то остаток от деления числа на 8 умножается на 5, переводится в восьмеричную запись и дописывается слева

    Полученная таким образом запись является восьмеричной записью искомого числа R.

  3. Результат переводится в десятичную систему и выводится на экран. Например, для исходного числа 12 = 148 результатом является число 14468 = 806, а для исходного числа 777 = 14118 это число 411468 = 16998. Укажите минимальное число R, которое может быть получено с помощью описанного алгоритма при N не меньшем 80. В ответ запишите это число в десятичной системе счисления.

Решение

Функция f(n)

def f(n):
    count_chet = 0
    count_nechet = 0
    for i in n:
        if int(i) % 2 == 0:
            count_chet += 1
        else:
            count_nechet += 1
 
    if count_chet % 2 == 1:
        return True
    else:
        return False
  • Принимает строку n — число в восьмеричной системе.
  • Подсчитывает количество чётных и нечётных цифр.
  • Возвращает True, если число чётных цифр нечётное.

Пример работы:

Вход (n)Чётные цифрыНечётные цифрыВозвращает
"17"02False
"32"11True

Основной цикл

a = []
 
for N in range(80, 1000):
  • N принимает значения от 80 до 999.

Представление числа в восьмеричной системе

n = oct(N)[2:]
  • oct(N) даёт строку '0o...', удаляем 0o.

Пример:

N = 100  # Восьмеричное: '0o144' → n = '144'

Изменение n в зависимости от f(n)

if f(n):
    n = n[-3:] + '46'
  • Если f(n) == True, оставляем последние три цифры и добавляем '46'.
# Пример
N = 100  # n = '144'
# f(n) == True → '144'[-3:] + '46' = '14446'
# Последние три символа: '446'
else:
    n = oct((N % 8) * 5)[2:] + n
  • Если f(n) == False, спереди добавляем oct((N % 8) * 5)[2:].
# Пример
N = 101  # n = '145'
N % 8 = 5 → (5 * 5) = 25oct(25) = '31'
n = '31' + '145' = '31145'

Преобразование в десятичную систему и поиск минимума

R = int(n, 8)
a.append(R)
print(min(a))
  • int(n, 8) — переводит из восьмеричной системы в десятичную.
  • min(a) — находим минимальное число из списка.