Текстовый файл состоит из заглавных букв латинского алфавита — цифр римской системы счисления I, V, X, L, C, D, M.
Определите в прилагаемом файле максимальное количество идущих подряд символов, которые представляют собой корректную римскую запись десятичного числа. Если найдено несколько таких последовательностей, выберите ту, которая обозначает наименьшее десятичное число. В ответе укажите десятичное число, соответствующее найденной последовательности римских цифр.
Для выполнения этого задания следует написать программу.
Примечание.
В римской системе счисления приняты следующие правила:
- в качестве цифр используют заглавные латинские буквы I, V, X, L, C, D, M, числовое значение которых 1, 5, 10, 50, 100, 500 и 1000 соответственно;
- цифры V, L, D никогда не повторяются;
- цифры I, X, C, M могут повторяться не более трёх раз подряд;
- если меньшая цифра стоит слева от большей, её значение вычитается из большей; вычитать можно только одну цифру I, X или C; вычитаемое не может быть меньше одной десятой от уменьшаемого;
- если цифра стоит справа от большей или равной, их значения складываются;
- цифры в записи числа располагаются слева направо в порядке невозрастания их числового значения за исключением случаев вычитания.
Например, римская запись MMXXVI корректна и обозначает число 2026, а запись MDDIVXXX некорректна.
Ответ:

Основная волна ЕГЭ по информатике 19.06.2026 – задание №24
Решение:
Код программы
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
def to_roman(n): values = [ (1000, 'M'), (900, 'CM'), (500, 'D'), (400, 'CD'), (100, 'C'), (90, 'XC'), (50, 'L'), (40, 'XL'), (10, 'X'), (9, 'IX'), (5, 'V'), (4, 'IV'), (1, 'I') ] result = '' for value, symbol in values: while n >= value: result += symbol n -= value return result s = open('24.txt').readline().strip() max_length = 0 answer = 0 for number in range(1, 4000): roman = to_roman(number) if roman in s: if len(roman) > max_length: max_length = len(roman) answer = number elif len(roman) == max_length: answer = min(answer, number) print(answer) |
Программа считывает из файла строку, состоящую из римских цифр. Затем она перебирает все целые числа от 1 до 3999 и с помощью функции to_roman() преобразует каждое число в корректную римскую запись.
Для каждого полученного варианта программа проверяет, встречается ли такая последовательность символов в исходной строке. Если римская запись найдена, её длина сравнивается с максимальной длиной, обнаруженной ранее.
Если текущая последовательность длиннее, программа запоминает её длину и соответствующее десятичное число. Если длины совпадают, выбирается меньшее десятичное число, как требуется в условии задачи.
В конце программа выводит десятичное число, которому соответствует самая длинная корректная римская последовательность в файле.
Ответ: 2388