πЕГЭ · ИИ-репетитор12 предметов · задания ФИПИ
Главная → Информатика → Задания №24 → Задание i24-12

Задание №24 ЕГЭ Информатика с ответом и решением

Ответ: D

Условие

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

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

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

Подсказки — как подойти к решению

  1. Ищи тройки символов, у которых первый и третий совпадают, и считай, какой символ стоит посередине. Перебирай строку по началу каждой тройки, оставив место под два символа в конце.
  2. Одинаковые соседи могут быть любой буквой, не только той, что стоит между ними: тройка вида ABA и тройка вида AAA считаются одинаково. Для каждого среднего символа веди отдельный счётчик.

Решение

Для решения этой задачи считаем строку из файла. Инициализируем строковую переменную 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))

Типичные ошибки

Решить это задание в тренажёре

В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №24 по информатике