Задания
Версия для печати и копирования в MS Word

Тек­сто­вый файл со­дер­жит толь­ко за­глав­ные буквы ла­тин­ско­го ал­фа­ви­та (ABCZ). Опре­де­ли­те наи­боль­шую длину це­поч­ки сим­во­лов, среди ко­то­рых нет сим­во­лов K и L, сто­я­щих рядом.

На­при­мер, в тек­сте ABCAABAKLD самая длин­ная це­поч­ка сим­во­лов, удо­вле­тво­ря­ю­щая усло­вию,  — ABCAABAK, её длина равна 8.

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

За­да­ние 24

Спрятать решение

Ре­ше­ние.

Будем по­сим­воль­но счи­ты­вать стро­ку из файла. Сна­ча­ла счи­та­ем пер­вый сим­вол стро­ки. Далее в цикле будем счи­ты­вать сим­во­лы и про­ве­рять, встре­ча­ет­ся ли в те­ку­щей це­поч­ке ком­би­на­ция сим­во­лов KL или LK. Если такая ком­би­на­ция не встре­ча­ет­ся  — уве­ли­чи­ва­ем счётчик k, если такая ком­би­на­ция встре­ча­ет­ся  — сбра­сы­ва­ем счётчик в зна­че­ние 1.

 

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

var k, max: integer;

c1, c2: char;

f: text;

begin

assign(f,'C:\24.txt');

reset(f);

k := 1;

max := 0;

read(f, c1);

while not Eof(f) do begin

c2 := c1;

read(f, c1);

if ((c2 = 'K') and (c1 = 'L')) or ((c2 = 'L') and (c1 = 'K')) then begin

if k > max then

max := k;

k := 1;

end

else

k := k + 1;

end;

if k > max then

max := k;

writeln(max);

end.

 

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

 

Ответ: 2796.

 

При­ме­ча­ние. Путь к файлу не­об­хо­ди­мо ука­зать со­глас­но рас­по­ло­же­нию файла на Вашем ком­пью­те­ре.

 

При­ведём ре­ше­ние Ви­та­са Ре­мей­ки­са на языке Python.

file = open('24.txt', 'r')

st = file.readline()

k = 1

mx = 0

for i in range(1, len(st)):

if (st[i] == 'K' and st[i-1] == 'L') or (st[i-1] == 'K' and st[i] == 'L'):

k = 1

else:

k += 1

if k > mx:

mx = k

print(mx)

 

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

t = open("24.txt").readline().replace("LK", "L/K").replace("KL", "K/L")

maximum = 0

counter = 0

for i in t:

if i != "/":

counter += 1

else:

maximum = max(maximum, counter)

counter = 0

print(maximum)

 

При­ведём ре­ше­ние Бо­ри­са Са­ве­лье­ва на языке Python.

f = open('24.txt')

s = f.readline()

maxi = 0

s = s.replace('KL','K L')

s = s.replace('LK','L K')

s = s.split(' ')

for i in range (0,len(s)):

maxi = max(maxi,len(s[i]))

print(maxi)

 

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

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

s = s.replace('KL', 'K L').replace('LK', 'L K')

print(max([len(x) for x in s.split()]))

Источник: ЕГЭ−2021 по ин­фор­ма­ти­ке 24.06.2021. Ос­нов­ная волна. Раз­ные за­да­чи
Раздел кодификатора ФИПИ: