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

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

Ответ: 15

Условие

Текстовый файл состоит не более чем из 106 символов L, D и R. Определите максимальную длину цепочки вида LDRLDRLDR... (составленной из фрагментов LDR, последний фрагмент может быть неполным).

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

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

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

  1. Цепочка собирается из повторяющихся фрагментов LDR, причём последний фрагмент может быть неполным. Сравнивай очередной символ с ожидаемым по позиции: порядок L, D, R повторяется по кругу.
  2. Следи за обрывом: если ожидание нарушено, но символ равен L, цепочка начинается заново с единицы, а в остальных случаях счётчик обнуляется. На этом тонком моменте теряют один символ.

Решение

Приведём решение Чуркина Николая (Тимашевск) на языке Python.

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

k = m = 0

for i in range(len(f)):

if (f[i] == 'L' and k%3 == 0) or (f[i] == 'D' and k%3 == 1) or (f[i] == 'R' and k%3 == 2):

k += 1

m = max(m, k)

elif f[i] == 'L': k = 1

else: k = 0

print(m)

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

Ответ: 15.

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

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

d = f.replace('LDR','X')

cnt = 0

max_len = 0

for g in range(len(d)):

if d[g]=='X':

cnt+=1

else:

max_len = max(max_len,cnt)

cnt = 0

print(max_len * 3) # Так как Х — это 3 символа (LDR), длину цепочки умножаем на 3.

Приведём решение Сергея Калугина на языке Python.

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

f = f.replace('LDR', '***').replace('L', ' ').replace('D', ' ').replace('R', ' ').split()

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

-->

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

s = open('zadanie24_2.txt').readline()

cnt = 2

maxi = 0

for i in range(0, len(s)-2, 1):

if s[i:i+3] in ('LDR', 'DRL', 'RLD'):

cnt += 1

maxi = max(maxi, cnt)

else:

cnt = 2

print(maxi)

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

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

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

begin

var s: string;

var i, count, maxCount: integer;

assign(input, '24.txt');

readln(s);

count:=0;

maxCount:=0;

for i:=1 to Length(s) do

if ((s[i]='L') and (count mod 3=0)) or

((s[i]='D') and (count mod 3=1)) or

((s[i]='R') and (count mod 3=2)) then begin

count := count+1;

if count > maxCount then

maxCount := count;

end

else if s[i]='L' then count:=1

else count := 0;

writeln(maxCount);

end.

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

#include

#include

using namespace std;

int main () {

ifstream fin("C:/Users/Сева/Downloads/zadanie24_2.txt");

char a,b;

int s=0,f=0,y=0;

fin >> a;

while(fin >> a){

if(b=='L')y++;

if(y>0){

if(b=='L'&&a=='D')s++;

if(b=='D'&&a=='R')s++;

if(b=='R'&&a=='L')s++;

if(s>f)f=s;

if((b=='L'&&a!='D')||(b=='D'&&a!='R')||(b=='R'&&a!='L')){

s=1;

y=0;

}

}

b=a;

}

cout <<f <

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

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

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