Задание №24 ЕГЭ Информатика с ответом и решением
Ответ: 42
Условие
Текстовый файл состоит не более чем из 106 символов A, B и C. Определите максимальное количество идущих подряд символов, среди которых каждые два соседних различны.
Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.
Подсказки — как подойти к решению
- Файл — сплошная строка из символов A, B и C; читай её целиком или посимвольно и следи, чтобы в данные не попал перевод строки в конце файла.
- Достаточно одного прохода: храни предыдущий символ и длину текущей цепочки. Пока соседние символы различны, цепочка продолжается; как только встретились два одинаковых, цепочка обрывается и счёт начинается заново.
- Обновляй максимум не только внутри цикла, но и после его окончания — самая длинная цепочка может стоять в самом конце строки. Помни, что при обрыве счётчик сбрасывается в 1: текущий символ уже начало новой цепочки.
Решение
Приведём решение Николая Чуркина (Тимашевск) на языке Python.
f = open('24.txt').readline()
k = 1
m = 0
for i in range(1, len(f)):
if f[i] != f[i-1]:
k += 1
else:
m = max(m, k)
k = 1
m = max(m, k)
print(m)
В результате работы данного алгоритма при вводе данных из файла в условии получаем ответ — 42.
Ответ: 42.
Приведём решение Максима Фатихова на языке Python.
f = open('24.txt').readline()
while 'AA' in f or 'BB' in f or 'CC' in f:
f = f.replace('AA','A A')
f = f.replace('BB','B B')
f = f.replace('CC','C C')
f = f.split()
print(max(len(x) for x in f))
Приведём другое решение данной задачи на языке 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.
Типичные ошибки
- Получено количество пар соседних различных символов, то есть переходов, а не символов: в цепочке из n символов ровно n−1 переход. Прибавь единицу и проверь обновление максимума после цикла.
- Счётчик увеличен на один лишний символ — например, k стартует с 1 до цикла и первый символ цепочки учитывается дважды. Проверь алгоритм на короткой строке, где длину самого длинного участка видно вручную.
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №24 по информатике