РУҚА
Задания № 12, 17, 24 · ЕГЭ

Обработка массива по условию

Шаблоны подсчёта, суммирования и поиска элементов массива по условию
6 мин чтенияСложность: Обновлено 29 сентября 2026

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

Общий шаблон обработки

Пусть дан массив \(a\) из \(n\) элементов. Для каждого индекса \(i\) проверяем условие, записанное через \(a[i]\). Если условие истинно, выполняем нужное действие: увеличиваем счётчик, добавляем элемент к сумме, сравниваем его с текущим максимумом или сохраняем его индекс.

D
Обработка по условию

Обработка массива по условию — это алгоритм вида: просмотреть элементы, проверить условие для каждого элемента и изменить результат, если условие выполнено.

\[\text{для } i=0,1,\ldots,n-1:\quad \text{если } P(a[i]),\text{ то выполнить действие}\]

В задачах на экзамене особенно важно различать индекс и значение элемента. \(i\) — это номер позиции, а \(a[i]\) — число, записанное в этой позиции. Если требуется вывести сами элементы, используем \(a[i]\); если нужно найти позицию, сохраняем $i.

Python
for i in range(n):
    if condition(a[i]):
        action(a[i], i)
Удобная запись условия

Сложное условие разбивайте на части: сравнения соединяются операторами and и or, отрицание записывается как not. Например, условие «число положительное и чётное» в Python: a[i] > 0 and a[i] % 2 == 0.

Подсчёт и суммирование

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

\[k=\sum_{i=0}^{n-1}[P(a[i])]\]

Здесь \([P]\) — индикатор условия: он равен \(1\), если условие истинно, и \(0\) в противном случае. В программе обычно используют if, а не записывают индикатор явно.

Python
count = 0
for x in a:
    if x % 3 == 0:
        count += 1

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

\[S=\sum_{i=0}^{n-1}a[i]\cdot[P(a[i])]\]

Например, для суммы положительных элементов условие \(a[i]>0\), а для суммы элементов на отрезке \([L,R]\) условие имеет вид \(L\le a[i]\le R\). При двух границах важно проверить обе части условия.

Микропроверка

Какое начальное значение нужно выбрать для счётчика количества отрицательных элементов?

Поиск элемента и его позиции

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

Python
index = -1
for i in range(n):
    if a[i] > 100:
        index = i
        break

После цикла проверяют index. Если он равен -1, подходящего элемента нет. Иначе первый подходящий элемент равен a[index]. Для поиска последнего подходящего элемента break не используют: индекс перезаписывается при каждом совпадении.

T
Правило поиска экстремума по условию

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

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

\[M=\max\{a[i]\mid 0\le i<n,\ P(a[i])\}\]

Проверка существования особенно важна: максимум пустого множества не определён. Поэтому в программе часто хранят флаг found или индекс первого подходящего элемента.

Разобранный пример: сумма и количество

Дан массив \([12,-5,7,0,18,-2,9]\). Требуется определить количество положительных нечётных элементов и их сумму. Условие должно одновременно проверять знак и нечётность: \(x>0\) и \(x\bmod 2\ne0\).

1
Задаём начальные значения: до просмотра массива подходящих элементов нет.
\(\displaystyle k=0,\quad S=0\)
2
Проверяем \(12\): число положительное, но чётное, поэтому условие ложно.
\(\displaystyle k=0,\quad S=0\)
3
Проверяем \(-5\): число нечётное, но не положительное.
\(\displaystyle k=0,\quad S=0\)
4
Проверяем \(7\): условие истинно, увеличиваем счётчик и прибавляем число.
\(\displaystyle k=1,\quad S=7\)
5
Проверяем \(0\): ноль не является положительным.
\(\displaystyle k=1,\quad S=7\)
6
Проверяем \(18\): число положительное, но чётное.
\(\displaystyle k=1,\quad S=7\)
7
Проверяем \(-2\): число не положительное и чётное.
\(\displaystyle k=1,\quad S=7\)
8
Проверяем \(9\): условие истинно.
\(\displaystyle k=2,\quad S=16\)
Python
a = [12, -5, 7, 0, 18, -2, 9]
count = 0
s = 0
for x in a:
    if x > 0 and x % 2 != 0:
        count += 1
        s += x
print(count, s)
№
Ответ к примеру

Положительные нечётные элементы — \(7\) и \(9\). Их количество равно \(2\), сумма равна \(16\).

Границы, отрезки и несколько условий

Условие «элемент находится на отрезке \([L,R]\)» означает включение обеих границ: \(L\le a[i]\le R\). Если границы не входят в отрезок, используют строгие неравенства: \(L<a[i]<R\). Соседняя тема количество элементов на отрезке помогает закрепить этот шаблон.

Если нужно обработать элементы на позициях от \(l\) до \(r\), ограничивают сам цикл индексами. При нумерации с нуля в Python правая граница диапазона не включается: range(l, r + 1) обрабатывает позиции \(l, l+1,\ldots,r\).

\[S_{[l,r]}=\sum_{i=l}^{r}a[i]\cdot[P(a[i])]\]

Для каждого элемента условие проверяют ровно один раз, поэтому время работы обычно равно \(O(n)\), а дополнительная память — \(O(1)\). Если требуется много запросов к отрезкам, может понадобиться сумма на отрезке с префиксными суммами.

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

1. Счётчик или сумму не обнуляют перед циклом. 2. Вместо a[i] используют i и проверяют индекс, а не значение. 3. В условии для отрезка забывают одну границу. 4. Для поиска первого элемента не используют break и получают последний найденный индекс. 5. Делят сумму на количество, не проверив, что количество не равно нулю; среднее по условию рассматривается на странице среднее по условию.

Как выбирать шаблон

Что требуетсяПеременнаяДействие при истинном условии
Количествоcount = 0count += 1
Суммаs = 0s += a[i]
Первый индексindex = -1index = i; break
Последний индексindex = -1index = i
Максимумfound = Falseсравнить с текущим максимумом
Произведениеp = 1p *= a[i]

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

Q
Быстрый тест по теме

Проверь себя

~ 2 мин4 вопроса
Вопрос 1 / 4
Вопрос 1 из 4 · границы и составное условие
Какое условие выбирает чётные числа от \(10\) до \(20\) включительно?
Главное за минуту

Главное

  • Общий шаблон: пройти по массиву, проверить условие для каждого элемента, выполнить действие при истинном условии.
  • Для количества используют начальное значение 0 и прибавляют 1; для суммы — 0 и прибавляют подходящий элемент.
  • Индекс \(i\) и значение \(a[i]\) — разные объекты: внимательно определяйте, что требуется найти.
  • Для первого подходящего элемента используют break, для последнего — продолжают просмотр и обновляют индекс.
  • При работе с отрезком проверяйте, входят ли его границы; один просмотр массива обычно занимает \(O(n)\) времени.