Найти в Дзене

Разбор номера 22271 #КЕГЭ по информатике #ЕГЭ5

Автор: О. Лысенков
Уровень: Средний На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится восьмеричная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если восьмеричная запись начинается на 5, то все двойки в записи меняются на единицы, а все единицы меняются на двойки после к числу приписывается 11 слева;
б) если восьмеричная запись начинается не на 5, то к записи справа приписывается 10, а первый разряд полученной записи заменяется на 2. Укажите максимальное число N, для которого результатом работы алгоритма является наибольшее число R, меньшее 1354. Больше разборов на эту и другие задачи вы можете найти в нашем Телеграм канале: Информатика ЕГЭ | itpy 👨‍💻 Подписывайтесь на наш канал по теории Python: Азим вкатывается в IT | itpy 💻  Вы найдете тут много полезного!
Оглавление

Автор: О. Лысенков
Уровень: Средний

Условие задачи:

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

1. Строится восьмеричная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если восьмеричная запись начинается на 5, то все двойки в записи меняются на единицы, а все единицы меняются на двойки после к числу приписывается 11 слева;
б) если восьмеричная запись начинается не на 5, то к записи справа приписывается 10, а первый разряд полученной записи заменяется на 2.

Укажите максимальное число N, для которого результатом работы алгоритма является наибольшее число R, меньшее 1354.

Код решения:

Ответ: 61
Ответ: 61

Комментарии к коду:

  1. L = []
    Создаем пустой список для хранения пар (результат, исходное число)
  2. for n in range(1, 10000):
    Перебираем числа n от 1 до 9999
  3. s = f'{n:o}' # s = oct(n)[2:]
    Преобразуем число n в восьмеричную систему счисления (без префикса '0o')
  4. if s[0] == '5':
    Проверяем, начинается ли восьмеричная запись с цифры 5
  5. s = s.replace('2', '*')
    Временно заменяем все цифры 2 на символ '*' (чтобы избежать конфликта при следующих заменах)
  6. s = s.replace('1', '2')
    Заменяем все цифры 1 на 2
  7. s = s.replace('*', '1')
    Заменяем временные символы '*' обратно на 1 (фактически меняем местами 1 и 2)
  8. s = '11' + s
    Добавляем в начало строки две единицы '11'
  9. else:
    Если восьмеричная запись НЕ начинается с 5
  10. s = s + '10'
    Добавляем в конец строки '10'
  11. s = '2' + s[1:] # а первый разряд полученной записи заменяется на 2.
    Заменяем первую цифру полученной строки на 2
  12. r = int(s, 8)
    Преобразуем полученную строку s обратно в десятичное число, интерпретируя ее как восьмеричную
  13. if r < 1354:
    Проверяем, что результат r меньше 1354
  14. L.append((r, n))
    Добавляем в список пару (результат r, исходное число n)
  15. print(max(L))
    Находим и выводим максимальную пару в списке (сравнение происходит сначала по r, затем по n)
Больше разборов на эту и другие задачи вы можете найти в нашем Телеграм канале: Информатика ЕГЭ | itpy 👨‍💻
Подписывайтесь на наш канал по теории Python: Азим вкатывается в IT | itpy 💻  Вы найдете тут много полезного!