Задача 6051. Источник: Поляков. Задание КИМ 24
Текстовый файл 24-241.txt состоит не более чем из 106 символов и содержит только латинские буквы A, B, C, D, E, F, O. Определите максимальное количество идущих подряд групп символов вида «согласная + согласная + гласная».
Решение
Просматриваем строку посимвольно. Если следующая тройка соответствует условию, увеличиваем счетчик и смещаем указатель обрабатываемого символа на три. В данной задаче конец одной строки не может являться началом другой, что делает программный код проще.
Python
s = open('24-241.txt').readline()
k = 0
mx = 0
i = 0
while i < len(s) - 2:
if s[i] in 'BCDF' and s[i + 1] in 'BCDF' and s[i + 2] in 'AEO':
k += 1
mx = max(mx, k)
i += 3
else:
k = 0
i += 1
print(mx)
PascalABC
var
max, k, i: Integer;
s: String;
f: TEXT;
begin
Assign(f, '24-241.txt');
Reset(f);
Readln(f, s);
k := 0;
max := 0;
i := 1;
while i < s.Length - 1 do
if (s[i] in 'BCDF') and (s[i + 1] in 'BCDF') and (s[i + 2] in 'AEO') then
begin
k := k + 1;
if k > max then
max := k;
i := i + 3;
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-241.txt");
string s, s1 = "AEO", s2 = "BCDF";
f >> s;
int k = 0, max = 0, i = 0;
while (i < s.length() - 2)
if (s2.find(s[i]) != -1 && s2.find(s[i + 1]) != -1 && s1.find(s[i + 2]) != -1)
{
k++;
if (k > max)
max = k;
i += 3;
}
else
{
k = 0;
i++;
}
cout << max << endl;
}
Ответ
19