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

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

Ответ: T

Условие

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

Необходимо найти строку, содержащую наименьшее количество букв G (если таких строк несколько, надо взять ту, которая находится в файле раньше), и определить, какая буква встречается в этой строке чаще всего. Если таких букв несколько, надо взять ту, которая позже стоит в алфавите.

Пример. Исходный файл:

GIGA

GABLAB

AGAAA

В этом примере в первой строке две буквы G, во второй и третьей — по одной. Берём вторую строку, так как она находится в файле раньше. В этой строке чаще других встречаются буквы A и B (по два раза), выбираем букву B, так как она позже стоит в алфавите. В ответе для этого примера надо записать B.

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

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

  1. Читай файл построчно и для каждой строки считай количество букв G. Нужна строка с наименьшим их числом, а при равенстве — та, что встречается в файле раньше.
  2. Строгое сравнение здесь принципиально: выбирай новую строку только при меньшем количестве G, иначе поздняя строка с тем же числом перезапишет раннюю. В выбранной строке при равной частоте букв бери последнюю по алфавиту.

Решение

Для решения этой задачи объявим массив arr, в котором будем считать количество каждого символа в строке, переменную min, в которой будем хранить минимальное найденное количество символов G в какой-⁠либо строке, переменную countG, в которую будем записывать количество символов G в очередной считанной строке. Последовательно считывая строки, будем считать в них количество символов G и записывать это количество в переменную countG. Также будем считать в очередной считанной строке количество каждого отдельного символа с помощью массива arr. Если значение переменной countG окажется меньше текущего значения переменной min, будем находить максимальное значение элемента массива arr и символ, соответствующий этому значению. Если в строке будет встречено одинаковое количество двух разных символов, необходимо в переменную res записать тот символ, который согласно алфавиту идёт позже. Для этого при поиске максимального значения элемента массива используем условие «maxC <= arr[j]».

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

var

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

i, min, countG, maxC: integer;

j, res: char;

str: string;

f: text;

begin

min := 100000;

maxC := 0;

countG := 0;

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

reset(f);

for j := 'A' to 'Z' do arr[j] := 0;

while not eof(f) do begin

readln(f, str);

for i:= 1 to str.Length do begin

if (str[i] = 'G') then countG := countG + 1;

arr[str[i]] := arr[str[i]] + 1;

end;

if min > countG then begin

min := countG;

maxC := 0;

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

if (maxC <= arr[j]) then begin

maxC := arr[j];

res := j;

end;

end;

end;

for j := 'A' to 'Z' do arr[j] := 0;

countG := 0;

end;

writeln(res);

end.

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

Ответ: T.

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

Приведём решение Витаса Ремейкиса на языке Python.

file = open("24.txt", "r")

a = [10**6]*91

for i in range(1000):

st = file.readline()

d = [0]*91

for j in range(len(st)):

d[ord(st[j])] += 1

if d[71] < a[71]:

for k in range(len(d)):

a[k] = d[k]

mx = 0

for i in range(len(a)):

if a[i] >= mx:

mx = a[i]

mxchar = chr(i)

print(mxchar)

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

file = open("24 (3).txt", "r")

dg = {'G':10**6}

for st in file:

d = {}

for sym in st:

if sym in d:

d[sym] += 1

else:

d[sym] = 1

if d['G'] < dg['G']:

dg = d

print(max(dg, key=dg.get))

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

from collections import Counter

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

mn = 10**20

temp = ''

for i in f:

if i.count('G') < mn:

mn = i.count('G')

temp = Counter(i).most_common()[0][0]

print(temp)

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

f = open('24.txt')

a = [str(i) for i in f]

mini = 1000000

for i in range(len(a)):

k = a[i].count('G')

if k < mini:

mini = k

t = i

print(max(set(a[t]),key = a[t].count))

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

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

c = []

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

g = s[i].count('G')

c.append(g)

s = s[c.index(min(c))] # берём строку с минимальным кол-вом 'G'

c = {}

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

if not s[i] in c: c[ s[i] ] = 0

c[ s[i] ] += 1

print(max(c, key=c.get))

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

f = open('24.txt')

kG = 10**10

for s in f:

if s.count('G') < kG:

kG = s.count('G')

m = [str(i) for i in s]

al = 'QWERTYUIOPASDFGHJKLZXCVBNM'

kb = 0

for i in al:

if m.count(i) > kb:

kb = m.count(i)

B = i

print(B)

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

a = [s for s in open('24.txt')]

ming = min([s.count('G') for s in a])

line = [s for s in a if s.count('G')==ming][0]

maxlet = max([line.count(c) for c in line])

print(sorted([c for c in set(line) if line.count(c) == maxlet])[-1])

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

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

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