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

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

На­при­мер, в тек­сте CBCABABACCC есть ком­би­на­ции CBC, ABA (два раза), BAB и CCC. Чаще всего  — 3 раза  — между двумя оди­на­ко­вы­ми сим­во­ла­ми стоит B, в от­ве­те для этого слу­чая надо на­пи­сать B.

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

За­да­ние 24

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

Ре­ше­ние.

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

 

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

var

len, max, count: longint;

s, s1: string;

maxC: char;

f: text;

begin

assign(f,'C:\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+2]) then

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

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.

 

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

 

Ответ: D.

 

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

 

При­ведём дру­гое ре­ше­ние.

var

arr: array ['A'..'Z'] of integer;

i, max: integer;

j, res: char;

str: string;

f: text;

begin

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

reset(f);

readln(f, str);

for i:= 1 to str.Length - 2 do begin

if (str[i] <> str[i + 2]) then continue;

inc(arr[str[i + 1]]);

end;

for j:= 'A' to 'Z' do begin

if (arr[j] > max) then begin

max:= arr[j];

res:= j;

end;

end;

writeln(res);

end.

 

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

f = open("24.txt")

x = f.read()

count = {}

for i in range(1, len(x) - 1):

if x[i - 1] == x[i + 1]:

if x[i] not in count:

count[x[i]] = 1

else:

count[x[i]] += 1

print(max(count, key=lambda k: count[k]))

 

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

from collections import Counter

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

a=[]

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

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

a.append(f[i])

b=Counter(a)

print(b)

 

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

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

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

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

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

 

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

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

a = [0]*26

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

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

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

print(chr(a.index(max(a))+65))

 

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

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

p = []

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

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

p.append(s[i+1])

print(max(p,key=p.count))

 

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

f = open('24.txt')

s = f.readline()

otv = []

for i in 'QWERTYUIOPASDFGHJKLZXCVBNM':

c = 0

for j in 'QWERTYUIOPASDFGHJKLZXCVBNM':

b = j+i+j

c += s.count(b)

otv.append([c, i])

print(*max(otv))


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

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