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

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

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

(PRO100 ЕГЭ) Текстовый файл 24-253.txt состоит не более чем из 106 символов и содержит только буквы латинского алфавита A, C, D, F и O. Определите максимальное количество идущих подряд троек символов вида согласная + любая буква + гласная Например, для строки ACCADAADD ответом будет число 2 (ACCADAADD).

Решение

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

Python

s = open('24-253.txt').readline()
k = 0
mx = 0
i = 0
while i < len(s) - 2:
    if s[i] in 'CDF' and s[i + 2] in 'AO':
        k += 1
        mx = max(mx, k)
        i += 3
    elif i > 1 and s[i - 2] in 'CDF' and s[i] in 'AO':
        k = 1
        i += 1
    else:
        k = 0
        i += 1
print(mx)

PascalABC

var
    max, k, i: Integer;
    s: String;
    f: TEXT;
begin
    Assign(f, '24-253.txt');
    Reset(f);
    Readln(f, s);
    k := 0;
    max := 0;
    i := 1;
    while i < s.Length - 1 do
        if (s[i] in 'CDF') and (s[i + 2] in 'AO') then
        begin
            k := k + 1;
            if k > max then
                max := k;
            i := i + 3;
        end
        else if (i > 2) and (s[i - 2] in 'CDF') and (s[i] in 'AO') then
        begin
            k := 1;
            i := i + 1;
        end
        else
        begin
            k := 0;
            i := i + 1;
        end;
    Writeln(max);
end.

C++

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    ifstream f;
    f.open("24-253.txt");
    string s, s1 = "CDF", s2 = "AO";
    f >> s;
    int k = 0, max = 0, i = 0;
    while (i < s.length() - 2)
        if (s1.find(s[i]) != -1 && s2.find(s[i + 2]) != -1)
        {
            k++;
            if (k > max)
                max = k;
            i += 3;
        }
        else if (i > 1 && s1.find(s[i - 2]) != -1 && s2.find(s[i]) != -1)
        {
            k = 1;
            i++;
        }
        else
        {
            k = 0;
            i++;
        }
    cout << max << endl;
}

Ответ

6

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

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

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

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