Задача. Четные отрицательные в матрице
Задана матрица размера $n \times n$. Найдите количество и сумму ее четных отрицательных элементов.
Входные данные
Первая строка содержит число $n \left(1 \leq n \leq 100\right)$. Следующие строки содержат матрицу $n \times n$. Элементы матрицы по модулю не больше $100$.
Выходные данные
Выведите в одной строке количество и сумму четных отрицательных чисел в матрице.
Тесты
№ | Ввод | Вывод |
1 | 3 4 -2 5 1 -4 -12 0 1 -3 |
3 -18 |
2 | 5 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 |
25 -2500 |
3 | 2 0 0 0 0 |
0 0 |
4 | 3 -2 -1 -1 -1 -2 -1 -1 -1 -2 |
3 -6 |
5 | 2 6 8 12 100 |
0 0 |
6 | 4 -25 0 12 5 -29 47 23 15 11 100 -89 20 55 25 42 -12 |
1 -12 |
7 | 2 -12 -12 -12 -12 |
4 -48 |
Решение
При обработке двумерного массива я использовал один цикл длиной в $n^2$ витков.
В нём я обращался к элементам с помощью целого и остатка от деления на $n$, то есть изменял второй индекс заново через каждые $n$ элементов, увеличивая, при таком переходе, первый индекс на единицу.
Используя этот приём я избежал вложенных циклов и просматривал элементы в том же порядке, как если бы их использовал.
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream> using namespace std; int main() { short n, count = 0, summ = 0, mat[100][100]; cin >> n; for (int i = 0; i < n * n; i++) cin >> mat[i / n][i % n]; for (int i = 0; i < n * n; i++) { short elem = mat[i / n][i % n]; if (elem % 2 == 0 && elem < 0) { count++; summ += elem; } } cout << count << ' ' << summ; return 0; } |