Программное решение задач ЕГЭ по информатике

Задача 6286. Источник: Поляков. Задание КИМ 24

Страница задачи 6286

Текстовый файл 24-164.txt состоит не более чем из 106 символов и содержиттолько буквы латинского алфавита. Текст разбит на строки различной длины. Для каждой строки нужно определить букву (или буквы), которая встречается в этой строке чаще всего после буквы X. Все эти буквы добавляются в новый список. Найдите букву, которая чаще всего встречается в построенном списке, и в качестве ответа укажите, сколько раз она там встретилась. Например, пусть файл содержит две строки:
XAXBXAXBCXX
BXAXCXCXAXD
В первой строке чаще всего после буквы X встречаются буквы А и B (по 2 раза), а во второй строке – буквы A и С (по 2 раза). В итоге должен быть построен список [A, B, A, C], в котором чаще всего (2 раза) встречается буква A. Ответ: 2.

Решение

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

Python

f = open('24-164.txt')
r = [0] * 26;
for s in f:
    s = s.strip()
    k = [0] * 26
    for i in range(1, len(s)):
        if s[i-1] == 'X':
            k[ord(s[i]) - 65] += 1
    mx = max(k)
    for i in range(26):
        if k[i] == mx:
            r[i] += 1
print(max(r))

PascalABC

var
    max, i: Integer;
    s: String;
    k, r: Array [0..25] of Integer;
    f: TEXT;
begin
    Assign(f, '24-164.txt');
    Reset(f);
    for i := 0 to 25 do
        r[i] := 0;
    Readln(f, s);
    while s <> '' do
    begin
        for i := 0 to 25 do
            k[i] := 0;
        for i := 2 to s.Length do
            if s[i - 1] = 'X' then
                k[ord(s[i]) - 65] := k[ord(s[i]) - 65] + 1;
        max := 0;
        for i := 0 to 25 do
            if k[i] > max then
                max := k[i];
        for i := 0 to 25 do
            if k[i] = max then
                r[i] := r[i] + 1;
        Readln(f, s);
    end;
    max := 0;
    for i := 0 to 25 do
        if r[i] > max then
            max := r[i];
    Writeln(max);
end.

C++

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    ifstream f;
    f.open("24-164.txt");
    int r[26];
    for (int i = 0; i < 26; i++)
        r[i] = 0;
    string s;
    while (f >> s)
    {
        int k[26];
        for (int i = 0; i < 26; i++)
            k[i] = 0;
        for (int i = 1; i < s.length(); i++)
            if (s[i - 1] == 'X')
                k[(int)s[i] - 65]++;
        int max = 0;
        for (int i = 0; i < 26; i++)
            if (k[i] > max)
                max = k[i];
        for (int i = 0; i < 26; i++)
            if (k[i] == max)
                r[i]++;
    }
    int max = 0;
    for (int i = 0; i < 26; i++)
        if (r[i] > max)
            max = r[i];
    cout << max << endl;
}

Ответ

928

Отправить замечание по решению

Код по которому имеется замечание:

Ваш вариант кода:

Комментарий: