Задание №24 ЕГЭ Информатика с ответом и решением
Ответ: 45
Условие
Текстовый файл состоит не более чем из 106 символов L, D и R. Определите максимальное количество идущих подряд символов, среди которых каждые два соседних различны.
Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.
Подсказки — как подойти к решению
- Файл содержит одну длинную строку символов L, D и R — читай её целиком одной строкой, а не по строкам. Иди по символам циклом и на каждом шаге сравнивай очередной символ с предыдущим.
- Держи текущую длину цепочки и максимум. Когда соседние символы совпали, цепочка рвётся: счётчик сбрасывай в единицу (текущий символ уже начало новой цепочки), а не в ноль — иначе потеряешь один символ.
Решение
Приведём решение Николая Чуркина (Тимашевск) на языке Python.
f = open('24.txt').readline()
k = 1
m = 0
for i in range(len(f)-1):
if f[i] != f[i+1]:
k += 1
m = max(m, k)
else:
k = 1
print(m)
В результате работы данного алгоритма при вводе данных из файла в условии получаем ответ — 45.
Ответ: 45.
Примечание. Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём решение Ильи Андрианова на языке Python.
s = open('zadanie24_2.txt').readline()
while 'DD' in s or 'RR' in s or 'LL' in s:
s = s.replace('DD', 'D D').replace('RR', 'R R').replace('LL', 'L L')
print(max([len(x) for x in s.split()]))
Приведём решение Ивана Новикова на языке Python.
a = open('zadanie24_2.txt').readline()
m = 0
x = 'LL RR DD'
for x1 in x.split():
while x1 in a:a = a.replace(x1 , f'{x[0]} {x[1]}')
for b in a.split():
m = max(len(b) , m)
print(m)
Приведём другое решение данной задачи на языке Pascal.
Для решения данной задачи будем посимвольно считывать текстовый файл. Объявим переменные: maxLen — максимальная длина последовательности, curLen — временное хранение длины последовательности, i — переменная для перебора всех символов, s — строка для работы с символами из файла. Алгоритм будет сравнивать значение текущего символа со значением предыдущего, и если символы будут удовлетворять нужным условиям, то значение счетчика будет увеличиваться на 1.
Приведём решение данной задачи на языке Pascal.
var maxLen, curLen, i: integer;
s: string;
begin
assign(input, '24.txt');
readln(s);
maxLen := 1;
curLen := 1;
for i:=2 to Length(s) do
if s[i] <> s[i-1] then begin
curLen := curLen + 1;
if curLen > maxLen then
maxLen := curLen;
end
else
curLen := 1;
writeln(maxLen);
end.
Типичные ошибки
- Единица потеряна на границе цепочки: счётчик сбрасывался в ноль или длина одиночного участка не сравнивалась с максимумом. Проверь, что максимум обновляется и на первом символе строки.
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №24 по информатике