Задание 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)
— находим минимальное число из списка.