Редакция для Количество чётных


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

1. Идея

Нужно пройти по всем кодам деталей и посчитать, сколько из них чётные.

Число является чётным, если оно делится на 2 без остатка, то есть x % 2 == 0.


2. Наблюдения

  • Нас интересует не значение кода само по себе, а только его чётность.
  • Для каждого числа можно отдельно проверить условие x % 2 == 0.
  • Отрицательные числа тоже проверяются точно так же. Например:
    • -4 — чётное,
    • -5 — нечётное.
  • Достаточно одного счётчика, который увеличивается на 1 для каждого чётного числа.

3. Алгоритм

  1. Считать число n.
  2. Считать n целых чисел.
  3. Завести переменную count_even = 0.
  4. Для каждого числа x:
    • если x % 2 == 0, увеличить count_even на 1.
  5. Вывести count_even.

4. Почему это работает

Алгоритм проверяет каждую деталь ровно один раз.

Для любой детали с кодом x возможны только два варианта:

  • x чётное, тогда x % 2 == 0, и мы увеличиваем счётчик;
  • x нечётное, тогда счётчик не меняется.

Значит, после обработки всех n чисел в count_even окажется ровно количество деталей с чётными кодами, что и требуется найти.


5. Сложность

  • Время: O(n), потому что мы один раз проходим по всем числам.
  • Память:
    • для решения на C++: O(1), так как числа можно обрабатывать по одному;
    • для решения на Python: O(n), так как в эталонном решении весь список считывается сразу.

6. Код на C++17

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;

    int count_even = 0;
    for (int i = 0; i < n; i++) {
        long long x;
        cin >> x;
        if (x % 2 == 0) {
            count_even++;
        }
    }

    cout << count_even << '\n';
    return 0;
}

7. Код на Python 3

n = int(input())
a = list(map(int, input().split()))

count_even = 0
for x in a:
    if x % 2 == 0:
        count_even += 1

print(count_even)

Комментарии

Еще нет ни одного комментария.