РУҚА
Тапсырмалар № 25, 27 · ЕГЭ

Обработка последовательности

План чтения, анализа и преобразования последовательности
6 мин чтенияҚиындық: Обновлено 29 қыркүйек 2026

Обработка последовательности — это универсальный план решения задач, в которых программа последовательно получает числа, анализирует их и, при необходимости, строит новую последовательность. Главный навык — хранить только нужную информацию и обновлять ответ после чтения каждого элемента.

1. Разбор условия и выбор данных

Сначала определите, что является одним элементом последовательности: число, символ или строка. Затем найдите способ завершения ввода: задано количество элементов \(n\), встречается специальный признак конца, либо последовательность уже записана в массиве. Если каждый элемент используется только один раз, обычно достаточно одного цикла и нескольких переменных. Перебор массива помогает организовать такой просмотр.

  1. Выпишите, какие элементы нужно прочитать и в каком порядке.
  2. Определите условие отбора: положительный элемент, чётное число, максимум, принадлежность отрезку и так далее.
  3. Решите, нужен ли весь массив. Если нет, используйте переменные-накопители и счётчики.
  4. Проверьте начальные значения: сумма начинается с нуля, количество — с нуля, максимум — с первого элемента или с гарантированно подходящего значения.
  5. Сформулируйте действие после чтения очередного элемента.
D
Последовательность и массив

Последовательность — упорядоченный набор элементов \(a_1,a_2,\ldots,a_n\). Массив — способ хранить эти элементы в памяти с доступом по индексу. Если элемент обрабатывается сразу после чтения, массив может быть не нужен.

Полезный сұрақ

Спросите себя: «Что я должен знать о уже прочитанных элементах, чтобы обработать следующий?» Ответ подсказывает набор переменных состояния: сумму, количество, текущий максимум, длину серии или предыдущий элемент.

2. Накопители, счётчики и условия

Большинство задач решается комбинацией трёх приёмов. Накопитель изменяется при каждом подходящем элементе, счётчик увеличивается на единицу, а переменная ответа хранит лучший найденный результат. Условие отбора записывают внутри цикла, поэтому неподходящие элементы не влияют на ответ.

\[S_{k+1}=S_k+a_{k+1}\quad\text{для суммирования всех элементов}\]
\[C_{k+1}=C_k+\begin{cases}1,&\text{если }a_{k+1}\text{ удовлетворяет условию},\\0,&\text{иначе.}\end{cases}\]1

Среднее значение нельзя вычислить только по сумме: необходимо знать количество элементов. Если требуется среднее положительных чисел, суммируйте и считайте только положительные элементы, а затем проверьте, что их количество не равно нулю.

ТапсырмаСостояниеОбновление
Сумма подходящих элементовsumsum = sum + a
Количество подходящих элементовcountcount = count + 1
Максимумbestbest = max(best, a)
Среднееsum и countsum / count
Количество измененийprevious и countcount увеличивается при a != previous
Микро-проверка

Как правильно найти среднее положительных элементов, если среди них может не оказаться ни бір?

3. Серии и соседние элементы

Серия — это максимальная группа подряд идущих элементов, обладающих одним признаком: например, положительных чисел или одинаковых символов. Для задач о сериях полезны страницы максимальная серия, количество серий и обработка серий.

D
Серия

Серия — непрерывный фрагмент последовательности, в котором каждый элемент удовлетворяет одному признаку, а соседние элементы вне фрагмента этому признаку не удовлетворяют. Максимальная серия не может быть расширена влево или вправо.

Для обработки серий обычно хранят текущую длину и наибольшую длину. Если очередной элемент подходит, текущая серия увеличивается. Иначе текущая длина сбрасывается в ноль, а максимум обновляется. Другой вариант — обнаруживать начало серии: текущий элемент подходит, а предыдущий не подходит.

\[L_{i}=\begin{cases}L_{i-1}+1,&P(a_i)=1,\\0,&P(a_i)=0,\end{cases}\qquad L_{\max}=\max(L_{\max},L_i)\]

Если условие зависит от предыдущего элемента, сначала обработайте первый элемент отдельно или задайте корректное начальное значение previous. Для сравнения соседей нельзя обращаться к \(a_{i-1}\) при \(i=1\).

4. Преобразование последовательности

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

  • Замена: если выполнено условие, присвоить элементу новое значение.
  • Фильтрация: записывать подходящие элементы в жаңа массив с отдельным индексом k.
  • Сжатие: хранить результат в начале того же массива, если это разрешено условием.
  • Перестановка: использовать временную переменную, чтобы не потерять значение.
T
Правило безопасной фильтрации

При формировании новой последовательности индекс результата увеличивается только тогда, когда очередной исходный элемент подходит. Поэтому после обработки \(i\) элементов в первые \(k\) позиций результата записаны ровно все подходящие элементы среди них.

Если элементом является число, для отдельных цифр применяют разложение числа на цифры, а сумму цифр находят приёмом со бет сумма цифр числа. Если обрабатываются две последовательности по очереди, важно не смешать их индексы; для специальных случаев пригодится две чередующиеся последовательности.

5. Разобранный пример

Тапсырма: дана последовательность из \(n\) целых чисел. Найдите длину максимальной серии положительных чисел. Если положительных элементов нет, выведите \(0\).

№
Идея шешімдер

Признак серии: \(a_i>0\). Пока признак выполняется, увеличиваем текущую длину. При первом неположительном числе серия заканчивается, и текущая длина сбрасывается. После каждого шага обновляем максимум.

1
До чтения элементов серия ещё не началась.
\(\displaystyle current=0,\quad best=0\)
2
Если очередное число положительное, оно продолжает текущую серию.
\(\displaystyle a_i>0\Rightarrow current\leftarrow current+1\)
3
Если число неположительное, положительная серия заканчивается.
\(\displaystyle a_i\le 0\Rightarrow current\leftarrow 0\)
4
Максимум нужно обновлять после обработки каждого элемента.
\(\displaystyle best\leftarrow\max(best,current)\)
5
После цикла выводим найденную длину.
answer=best
Python
1n = int(input())
2current = 0
3best = 0
4
5for _ in range(n):
6    a = int(input())
7    if a > 0:
8        current += 1
9    else:
10        current = 0
11    if current > best:
12        best = current
13
14print(best)

Проверим последовательность \(-2, 4, 7, 0, 3, 5, 8\). Значения current после каждого шага: \(0,1,2,0,1,2,3\). Максимум равен \(3\), значит ответ — длина серии \(3,5,8\).

!
Частые ошибки

Не сбрасывают current после неподходящего элемента; обновляют best только в конце серии и забывают последнюю серию; считают число положительных элементов вместо длины их самой длинной серии; начинают максимум с нуля в задаче, где все значения могут быть отрицательными; допускают обращение к предыдущему элементу до его появления.

6. Проверка алгоритма и программы

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

  • Количество прочитанных элементов равно \(n\).
  • Начальные значения переменных соответствуют пустой обработанной части.
  • Каждая переменная изменяется только в нужной ветви условия.
  • После цикла учтён последний элемент или последняя серия.
  • Нет деления на ноль и выхода за границы массива.
Q
Жылдам тест по теме

Быстрая проверка

~ 2 мин4 вопроса
Вопрос 1 / 4
Вопрос 1 из 4 · накопители
Что хранит count при поиске среднего положительных элементов?
Главное за минуту

Главное

  • Сначала определите формат ввода, условие отбора и необходимое состояние.
  • Для суммы используйте накопитель, для количества — счётчик, для лучшего результата — переменную ответа.
  • В задачах о сериях храните текущую длину и максимум; неподходящий элемент сбрасывает текущую длину.
  • При фильтрации индекс результата увеличивается только после жазбалар подходящего элемента.
  • Проверяйте крайние случаи: пустой результат, одну серию, серию в начале и в конце, отсутствие подходящих элементов.