Задание №24 ЕГЭ Информатика с ответом и решением
Ответ: 7
Условие
Текстовый файл состоит не более чем из 106 символов A, B и C. Определите максимальное количество идущих подряд символов A.
Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.
Подсказки — как подойти к решению
- Файл — сплошная строка из символов A, B и C; читай его целиком или посимвольно, следя, чтобы в данные не попал перевод строки.
- Нужен один проход: если текущий символ A и предыдущий тоже A, увеличивай счётчик текущей серии, иначе сбрасывай его в 1 — новая серия может начинаться уже с этого символа.
- Сравнивай счётчик с максимумом после каждого увеличения и ещё раз после цикла: самая длинная серия A может оказаться в самом конце строки. Проверь крайние случаи — строка из одних A и строка без A.
Решение
Приведём решение Николая Чуркина (Тимашевск) на языке Python.
f = open('24.txt').readline()
k = 1
m = 0
for i in range(len(f)-1):
if f[i] == 'A' and f[i+1] == 'A':
k += 1
m = max(m, k)
else: k = 1
print(m)
В результате работы данного алгоритма при вводе данных из файла в условии получаем ответ — 7.
Ответ: 7.
Приведём решение Тагира Шигербаева на языке Python.
f = open('24.txt').readline().replace('B','*').replace('C','*').split('*')
print(len(max(f, key= len)))
Приведём решение Михаила Глинского на языке Python.
f = open('zadanie24_1.txt').readline()
f = f.replace('B',' ')
f = f.replace('C',' ')
m = f.split()
dl = set(len(x) for x in m )
print(max(dl))
Приведём решение Артёма Позднякова на языке Python.
from re import *
s=open('zadanie24_1.txt').readline()
reg=r'A+'
print(max(len(x.group()) for x in finditer(reg,s)))
Приведём другое решение данной задачи на языке 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]) and (s[i] = 'A') then begin
curLen := curLen + 1;
if curLen > maxLen then
maxLen := curLen;
end
else
curLen := 1;
writeln(maxLen);
end.
Приведём решение Сергея Донец на языке PascalABC.NET.
begin
ReadAllText('24.txt') .MatchValues('A+')
.Select(w -> w.Length)
.DefaultIfEmpty(0) .Max .Print;
end.
Типичные ошибки
- Посчитано количество пар «AA», а не количество символов в серии. Серия из n символов содержит n−1 пару, поэтому к результату нужно прибавить единицу и не забыть финальное обновление максимума.
- Серия «удлинилась» на символ, который стоит сразу после B или C: счётчик не сбрасывается перед началом новой серии. Сбрасывай счётчик в 1 в момент, когда серия прервалась.
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №24 по информатике