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

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

На­при­мер, в тек­сте CCCBBABAABCC есть ком­би­на­ции CCC, CCB, BBA и AAB. Чаще всего  — 2 раза  — после двух оди­на­ко­вых сим­во­лов стоит B, в от­ве­те для этого слу­чая надо на­пи­сать B.

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

За­да­ние 24

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

Ре­ше­ние.

Для ре­ше­ния этой за­да­чи счи­та­ем стро­ку из файла. Ини­ци­а­ли­зи­ру­ем стро­ко­вую пе­ре­мен­ную s1 со зна­че­ни­ем ABCDEFGHIJKLMNOPQRSTUVWXYZ. По­сим­воль­но пе­ре­би­ра­ем стро­ку из файла, каж­дый раз про­ве­ряя, равен ли те­ку­щий сим­вол сле­ду­ю­ще­му сим­во­лу, и, если усло­вие вы­пол­ня­ет­ся, будем встав­лять в стро­ку s1 сим­вол, иду­щий между после двух оди­на­ко­вых сим­во­лов в счи­тан­ной стро­ке, таким об­ра­зом, чтобы в стро­ке s1 со­от­вет­ству­ю­щие сим­во­лы сто­я­ли рядом друг с дру­гом (на­при­мер, если из файла была счи­та­на стро­ка AABAAB, стро­ка s1 после вы­пол­не­ния ал­го­рит­ма будет вы­гля­деть так: ABBBCDEFGHIJKLMNOPQRSTUVWXYZ. После этого по­счи­та­ем длину самой длин­ной це­поч­ки сим­во­лов и таким об­ра­зом по­лу­чим ответ.

 

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

var

len, max, count: longint;

s, s1: string;

maxC: char;

f: text;

begin

assign(f,'C:\Users\Алек­сандр\Desktop\Ре­шу­ЕГЭ\24.txt');

reset(f);

readln(f, s);

len := length(s);

s1 := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

for i:integer := 1 to len-2 do begin

if (s[i] = s[i+1]) then

s1 := s1.Substring(0, s1.LastIndexOf(s[i+2])) + s[i+2] + s1.Substring(s1.LastIndexOf(s[i+2]));

end;

len := length(s1);

max := 1;

count := 0;

for i:integer := 1 to len-1 do begin

if (s1[i] = s1[i+1]) then count := count + 1

else count := 0;

if count > max then begin

max := count;

maxC := s1[i];

end;

end;

writeln(maxC);

end.

 

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

 

Ответ: K.

 

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

 

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

f = open("24.txt")

s = f.readline()

a = [0] * 26

maxi = 0

for i in range(len(s) - 1):

if s[i] == s[i + 1]:

a[ord(s[i + 2]) - 65] += 1

for i in range(26):

if a[i] > maxi:

maxi = a[i]

index = i

print(chr(index + 65))

 

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

f = open('24.txt')

s = f.read()

mas = []

m = 0

k = 0

for i in range(len(s)-2):

if s[i] == s[i+1]:

mas.append(s[i+2])

alf = 'QWERTYUIOPASDFGHJKLZXCVBNM'

for n in alf:

if m < mas.count(n):

m = mas.count(n)

k = n

print(k)

 

При­ведём ре­ше­ние Чер­няв­ско­го Сте­па­на на языке Python.

from collections import Counter

l = ''

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

for i in range(len(f)-2):

if f[i] == f[i+1]:

l += f[i+2]

print(Counter(l).most_common()[0][0])

 

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

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

a = [s[i+1] for i in range(1,len(s)-1) if s[i-1]==s[i]]

m = max([a.count(c) for c in set(a)])

print(*[c for c in set(a) if a.count(c)==m])

 

При­ведём ре­ше­ние Ми­ха­и­ла Мит­ро­фа­но­ва (Вла­ди­мир) на языке Python.

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

alf = list('QWERTYUIOPASDFGHJKLZXCVBNM')

count = [0] * 26

for x in range(2,len(f)):

if f[x-2] == f[x-1]:

count[alf.index(f[x])] += 1

print(alf[count.index(max(count))])


Аналоги к заданию № 33526: 33769 Все

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