πЕГЭ · ИИ-репетитор12 предметов · задания ФИПИ
Главная → Информатика → Задания №24 → Задание i24-02

Задание №24 ЕГЭ Информатика с ответом и решением

Ответ: 19

Условие

Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите длину самой длинной последовательности, состоящей из символов X. Хотя бы один символ X находится в последовательности.

Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.

Файл с исходными данными к этому заданию в открытом банке не опубликован — разбирай подход по официальному решению ниже.

Подсказки — как подойти к решению

  1. Файл — сплошная строка из символов X, Y и Z; читай его целиком или посимвольно, но следи, чтобы в данные не попал перевод строки.
  2. Нужен один проход: если текущий символ X и предыдущий тоже X, увеличивай счётчик текущей серии, иначе сбрасывай его в 1 — новая серия может начинаться уже с текущего символа.
  3. Сравнивай счётчик с максимумом после каждого увеличения и ещё раз после цикла: самая длинная серия может стоять в самом конце строки. Проверь алгоритм на крайних случаях — строка из одних X и серия из X в самом конце.

Решение

Для решения данной задачи будем посимвольно считывать текстовый файл. Объявим переменные: maxLen — максимальная длина последовательности, curLen — временное хранение длины последовательности, i — переменная для перебора всех символов, s — строка для работы с символами из файла. Алгоритм будет сравнивать значение текущего символа со значением предыдущего, и если символы не будут различаться и будут являться буквой X, то значение счетчика будет увеличиваться на 1.

Приведём решение данной задачи на языке Pascal.

var maxLen, curLen, i: integer;

s: string;

f: text;

begin

assign(f, '24.txt');

reset(f);

readln(f, s);

maxLen := 1;

curLen := 1;

for i:=2 to Length(s) do

if (s[i] = s[i-1]) and (s[i] = 'X') then begin

curLen := curLen + 1;

if curLen > maxLen then

maxLen := curLen;

end

else

curLen := 1;

writeln(maxLen);

end.

В результате работы данного алгоритма при вводе данных из файла в условии получаем ответ — 19.

Приведём решение Алексея Харитонова на языке Python.

f=open('24_demo.txt')

s=f.readline()

mx=1

cnt=1

for i in range(len(s)-1):

if s[i]=='X' and s[i+1]=='X':

cnt+=1

if cnt>mx:

mx=cnt

else:

cnt=1

mx = max(cnt, mx)

print(mx)

Приведём однострочное решение на языке Python.

print(max(map(len, open('24_demo.txt').readline().replace('Z', ' ').replace('Y', ' ').split())))

Приведём решение Юрия Лысакова на языке Python.

f = open('24_demo.txt')

s = f.read()

s1 = 'X'

while s1 in s:

s1 += 'X'

print(len(s1) - 1)

Приведём решение Максима Григорьева на языке Python.

f = open('24_demo.txt')

s = f.read()

for i in 'YZ':

s = s.replace(f'{i}', '*')

s = s.split('*')

print(len(max(s, key=len)))

Приведём решение Тимофея Софронова на языке Python.

from re import finditer

f = open('24_demo.txt').readline()

reg = 'X+'

print(max([len(x.group()) for x in finditer(reg,f)]))

Приведём решение Альберта К. на языке Python.

s = open('24_demo.txt').readline()

for i in range(len(s)):

if 'X' * i in s:

print(i)

else:

break

Приведём решение Сергея Донец на PascalABC.NET:

begin

ReadAllText('24.txt').Select(c->c ='X'?'1':'0')

.JoinToString.Split('0').Max(g -> g.Length).Print;

end.

Ответ: 19.

Типичные ошибки

Решить это задание в тренажёре

В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №24 по информатике