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

Тек­сто­вый файл со­сто­ит из сим­во­лов P, Q, R и S.

Опре­де­ли­те мак­си­маль­ное ко­ли­че­ство иду­щих под­ряд сим­во­лов в при­ла­га­е­мом файле, среди ко­то­рых нет иду­щих под­ряд сим­во­лов P.

Для вы­пол­не­ния этого за­да­ния сле­ду­ет на­пи­сать про­грам­му.

24.txt

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

Ре­ше­ние.

Для ре­ше­ния дан­ной за­да­чи будем по­сим­воль­но счи­ты­вать тек­сто­вый файл. Объ­явим пе­ре­мен­ные c1 и c2, ко­то­рые будут хра­нить преды­ду­щий сим­вол в файле и те­ку­щий. Также объ­явим пе­ре­мен­ные k и max. Пер­вая нужна для опре­де­ле­ния длины каж­дой по­сле­до­ва­тель­но­сти сим­во­лов, среди ко­то­рых нет иду­щих под­ряд сим­во­лов P, вто­рая  — для хра­не­ния мак­си­маль­ной длины такой по­сле­до­ва­тель­но­сти. Ал­го­ритм будет срав­ни­вать зна­че­ние те­ку­ще­го сим­во­ла со зна­че­ни­ем преды­ду­ще­го и, если не будут встре­че­ны два под­ряд иду­щих сим­во­ла P, уве­ли­чи­вать зна­че­ния счётчика k на 1.

 

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

var k, max: integer;

c1, c2: char;

f: text;

begin

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

reset(f);

c1 := '0';

c2 := '0';

k := 1;

max := 0;

while not Eof(f) do begin

c2 := c1;

read(f, c1);

if (c1 = c2) and (c2 = 'P') 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.

 

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

 

Ответ: 188.

 

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

 

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

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

st = file.readline()

k = 1

mx = 0

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

if st[i] == 'P' and st[i-1] == 'P':

k = 1

else:

k += 1

if k > mx:

mx = k

print(mx)

 

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

import re

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

print(max(map(len, re.split(r'P{2,}', s)))+2)

 

 

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

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

while 'PP' in s:

s = s.replace('PP', 'P P')

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

 

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

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

m = 0

for l in range(len(a)):

for r in range(l + m , len(a)):

c = a[l:r + 1]

if 'PP' not in c:

m = max(m , len(c))

elif 'PP' in c:

break

print(m)

Источник: Де­мон­стра­ци­он­ная вер­сия ЕГЭ−2022 по ин­фор­ма­ти­ке
Раздел кодификатора ФИПИ: