Информатика. ЕГЭ
Задания для подготовки
Задачи разных лет из реальных экзаменов, демо-вариантов, сборников задач и других источников
Задание 24. Информатика. ЕГЭ 2026. Основная волна. 19.06.2026
- Просмотры: 1463
- Изменено: 29 июня 2026
Текстовый файл состоит из заглавных букв латинского алфавита - цифр римской системы счисления \(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\) некорректна.
Решение:
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\)
Обсуждение задания
Здесь пока нет ни одного комментария. Будьте первым!


