Редакция для Количество чётных
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.
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. Алгоритм
- Считать число
n. - Считать
nцелых чисел. - Завести переменную
count_even = 0. - Для каждого числа
x:- если
x % 2 == 0, увеличитьcount_evenна1.
- если
- Вывести
count_even.
4. Почему это работает
Алгоритм проверяет каждую деталь ровно один раз.
Для любой детали с кодом x возможны только два варианта:
xчётное, тогдаx % 2 == 0, и мы увеличиваем счётчик;xнечётное, тогда счётчик не меняется.
Значит, после обработки всех n чисел в count_even окажется ровно количество деталей с чётными кодами, что и требуется найти.
5. Сложность
- Время:
O(n), потому что мы один раз проходим по всем числам. - Память:
- для решения на C++:
O(1), так как числа можно обрабатывать по одному; - для решения на Python:
O(n), так как в эталонном решении весь список считывается сразу.
- для решения на C++:
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)
Комментарии