Задание 12721
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
-
Строится восьмеричная запись числа N.
-
Далее эта запись обрабатывается по следующему правилу:
- а) если количество чётных цифр в записи числа нечётно, то к трём последним разрядам восьмеричной записи справа дописывается 46
- б) если количество чётных цифр в записи числа чётно, то остаток от деления числа на 8 умножается на 5, переводится в восьмеричную запись и дописывается слева
Полученная таким образом запись является восьмеричной записью искомого числа R.
-
Результат переводится в десятичную систему и выводится на экран. Например, для исходного числа 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" | 0 | 2 | False |
| "32" | 1 | 1 | True |
Основной цикл
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) = 25 → oct(25) = '31'
n = '31' + '145' = '31145'Преобразование в десятичную систему и поиск минимума
R = int(n, 8)
a.append(R)
print(min(a))int(n, 8)— переводит из восьмеричной системы в десятичную.min(a)— находим минимальное число из списка.