ALEXMATH

Информатика. ЕГЭ

Задания для подготовки

Задачи разных лет из реальных экзаменов, демо-вариантов, сборников задач и других источников

Перейти к заданиям

Задание 24. Информатика. ЕГЭ 2026. Основная волна. 19.06.2026

Просмотры: 1463
Изменено: 29 июня 2026

Текстовый файл состоит из заглавных букв латинского алфавита - цифр римской системы счисления \(I, \, V, \, X, \, L, \, C, \, D, \, M.\)

Определите в прилагаемом файле максимальное количество идущих подряд символов, которые представляют собой корректную римскую запись десятичного числа. Если найдено несколько таких последовательностей, выберите ту которая обозначает наименьшее десятичное число. В ответе укажите десятичное число, соответствующее найденной последовательности римских цифр.

Для выполнения этого задания следует написать программу.

Примечание.

В римской системе счисления приняты следующие правила:

  1. в качестве цифр используют заглавные латинские буквы \(I, \, V, \, X, \, L, \, C, \, D, \, M,\) числовое значение которых \(1, \, 5, \, 10, \, 50, \, 100, \, 500\) и \(1000\) соответственно;
  2. цифры \(V, \, L, \, D\) никогда не повторяются;
  3. цифры \(I, \, X, \, C, \, M\) могут повторяться не более трёх раз подряд;
  4. если меньшая цифра стоит слева от большей, её значение вычитается из большей; вычитать можно только одну цифру \(I, \, X\) или \(C;\) вычитаемое не может быть меньше одной десятой от уменьшаемого;
  5. если цифра стоит справа от большей или равной, их значения складываются;
  6. цифры в записи числа располагаются слева направо в порядке невозрастания их числового значения за исключением случаев вычитания.

Например, римская запись \(MMXXVI\) корректна обозначает число \(2026,\) а запись \(MDDIVXXX\) некорректна.

Решение:

Python


from re import finditer

def conv(rome):
    rd = {'M': 1000, 'D': 500, 'C': 100, 'L': 50, 'X': 10, 'V': 5, 'I': 1}
    ans = 0
    
    for a, b in zip(rome, rome[1:]):
        ans += -rd[a] if rd[a] < rd[b] else rd[a]
    ans += rd[rome[-1]]
    return ans

s = open('24.txt').readline().strip()
ml = 0
nums = set()

for g in finditer(r'(?=(M{,3}(?:CM|CD|D?C{,3})(?:XC|XL|L?X{,3})(?:IX|IV|V?I{,3})))', s):
    tmp = g.group(1)
    lt = len(tmp)
    if lt > ml:
        ml = lt
        nums = {tmp}
    elif lt == ml:
        nums.add(tmp)

res = {conv(r) for r in nums}
print(min(res))

Ответ: \(2388\)

Обсуждение задания

Здесь пока нет ни одного комментария. Будьте первым!

kege1
kege2
kege3
Новый тренажёр-эмулятор
Станции КЕГЭ

Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене.

Новое видео

Методы решения задания 16 ЕГЭ по Информатике «Вычисление рекуррентных выражений»

Поддержать автора сайта!

Поддержите автора сайта, если материалы, размещённые здесь, оказались вам полезны.

Совершая донат, вы соглашаетесь с Условиями использования

Расписание пробников Статграда в 2026/27 учебном году