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

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

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

(Д. Статный) Текстовый файл 24-235.txt состоит не более чем из 106 символов и содержит только заглавные буквы латинского алфавита. Определите максимальное количество подряд идущих символов, среди которых нет пар одинаковых символов (например, XX, ZZ). В ответе укажите количество повторений самого часто встречающегося символ в найденной строке. Если таких строк несколько, используйте последнюю из них.

Решение

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

Python

s = open('24-235.txt').readline()
k = 1
mx = 1
r = ''
for i in range(1, len(s)):
    if s[i] == s[i - 1]:
        k = 1
    else:
        k += 1
        if k >= mx:
            mx = k
            r = s[i - k + 1: i + 1]
mx = 0
for i in range(65, 91):
    mx = max(mx, r.count(chr(i)))
print(mx)

PascalABC

function Count(s: String; c: Char): Integer;
var
    i: Integer;
begin
    result := 0;
    for i := 1 to s.Length do
        if s[i] = c then
            result := result + 1;
end;

var
    max, k, i: Integer;
    s, r: String;
    c: Char;
    f: TEXT;
begin
    Assign(f, '24-235.txt');
    Reset(f);
    Readln(f, s);
    k := 1;
    max := 1;
    r := '';
    for i := 2 to s.Length do
        if s[i] = s[i - 1] then
            k := 1
        else
        begin
            k := k + 1;
            if k >= max then
            begin
                max := k;
                r := s[i - k + 1:i + 1];
            end;
        end;
    max := 0;
    for c := 'A' to 'Z' do
    begin
        k := count(r, c);
        if k > max then
            max := k;
    end;
    Writeln(max);
end.

C++

#include <iostream>
#include <fstream>
using namespace std;

int count(string s, char c)
{
    int n = 0;
    for (int i = 0; i < s.length(); i++)
        if (s[i] == c)
            n++;
    return n;
}

int main()
{
    ifstream f;
    f.open("24-235.txt");
    string s, r = "";
    f >> s;
    int k = 1, max = 1;
    for (int i = 1; i < s.length(); i++)
        if (s[i] == s[i - 1])
            k = 1;
        else
        {
            k++;
            if (k >= max)
            {
                max = k;
                r = s.substr(i - k + 1, k);
            }
        }
    max = 0;
    for (int i = 65; i < 91; i++)
    {
        k = count(r, (char)i);
        if (k > max)
            max = k;
    }

    cout << max << endl;
}

Ответ

19

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

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

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

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