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

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

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

За­да­ние 24

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

Ре­ше­ние.

Для ре­ше­ния дан­ной за­да­чи будем по­сим­воль­но счи­ты­вать тек­сто­вый файл. Объ­явим пе­ре­мен­ные c1 и c2, ко­то­рые будут хра­нить преды­ду­щий сим­вол в файле и те­ку­щий. Также объ­явим пе­ре­мен­ные k и max. Пер­вая нужна для опре­де­ле­ния длины каж­дой по­сле­до­ва­тель­но­сти не­по­вто­ря­ю­щих­ся сим­во­лов, вто­рая  — для хра­не­ния мак­си­маль­ной длины такой по­сле­до­ва­тель­но­сти. Ал­го­ритм будет срав­ни­вать зна­че­ние те­ку­ще­го сим­во­ла со зна­че­ни­ем преды­ду­ще­го и, если сим­во­лы не будут по­вто­рять­ся, уве­ли­чи­вать зна­че­ния счётчика 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 <> '0') then begin

k := k + 1;

end

else begin

if k > max then

max := k;

k := 1;

end;

end;

if k > max then

max := k;

writeln(max);

end.

 

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

 

Ответ: 35.

 

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

 

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

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

k = 1

m = 0

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

if f[i] != f[i-1]:

k += 1

else:

m = max(m, k)

k = 1

m = max(m, k)

print(m)

 

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

from itertools import permutations

with open('24_demo.txt') as f:

s = f.read()

pod = [''.join(x) for x in permutations('XYZ', 2)]

x, counter, c_max = 0, 0, 0

for i in range(len(s)):

if s[i + x:i + 2 + x] in pod:

counter += 1

x = 2

else:

c_max = max(c_max, counter)

counter, x = 0, 0

print(c_max)

 

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

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

a = ''.join(['*' if s[i]!=s[i-1] else ' ' for i in range(1,len(s))]).split()

print(max(len(x) for x in a)+1)

 

 

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

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

m = 0

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

for j in range (i+m, len(f)):

c = f[i:j+1]

if all(not x in c for x in['XX','ZZ','YY']):

m = max(m,len(c))

else: break

print(m)

 

При­ведём ре­ше­ние Ми­ха­и­ла Глин­ский на языке Python.

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

s=s.replace('XX','X X').replace('YY','Y Y').replace('ZZ','Z Z')

s=s.replace('XX','X X').replace('YY','Y Y').replace('ZZ','Z Z')

m=[len(x) for x in s.split()]

print(max(m))

 

При­ведём ре­ше­ние Ека­те­ри­ны Пар­ка­е­вой на языке С.

#include

int main()

{

FILE *f;

int mk = 0, k = 0;

char s = 'Q', p_s = 'Q';

if((f = fopen(«24_demo.txt", "r")) == NULL)

{

printf("file not open");

return 1;

}

while(!feof(f))

{

if(p_s != s)

k++;

else

{

if(mk < k)

mk = k;

k = 1;

}

p_s = s;

fscanf(f, "%c", &s);

}

fclose(f);

printf("%d", mk);

return 0;

}

 

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

#include

#include

using namespace std;

int main () {

ifstream fin("24_demo.txt");

char a,b;

int s=0;

int f=0;

fin >> a;

while(fin >> a){

if(a != b)f++;

if(f>s)s=f;

if(a == b)f=1 ;

b=a;

    }

   cout << s << endl;

}

}

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