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

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

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

За­да­ние 24

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

Ре­ше­ние.

Для ре­ше­ния дан­ной за­да­чи будем по­сим­воль­но счи­ты­вать тек­сто­вый файл. Объ­явим пе­ре­мен­ные: 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)]))

 

Ответ: 19.


Аналоги к заданию № 27686: 27687 27688 27692 ... Все

Раздел кодификатора ФИПИ: