Задание №24 ЕГЭ Информатика с ответом и решением
Ответ: D
Условие
Текстовый файл содержит только заглавные буквы латинского алфавита (ABC…Z). Определите символ, который чаще всего встречается в файле между двумя одинаковыми символами.
Например, в тексте CBCABABACCC есть комбинации CBC, ABA (два раза), BAB и CCC. Чаще всего — 3 раза — между двумя одинаковыми символами стоит B, в ответе для этого случая надо написать B.
Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.
Подсказки — как подойти к решению
- Ищи тройки символов, у которых первый и третий совпадают, и считай, какой символ стоит посередине. Перебирай строку по началу каждой тройки, оставив место под два символа в конце.
- Одинаковые соседи могут быть любой буквой, не только той, что стоит между ними: тройка вида 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 по информатике