Grade 10 · Two-dimensional arrays (matrices)Citește în română

The four zones of a square matrix

Original: Cele patru zone ale matricei pătratice

O(n²)C++1762 lines1 example

The idea

The two diagonals split a square matrix into four zones (without the elements on the diagonals). With indices from 1: North: i < j and i + j < n + 1 (above both diagonals); South: i > j and i + j > n + 1 (below both diagonals); East: i < j and i + j > n + 1 (above the main, below the secondary); West: i > j and i + j < n + 1 (below the main, above the secondary). The sum of the elements in each zone is printed.

Original description (Romanian)

Cele două diagonale împart o matrice pătratică în patru zone (fără elementele de pe diagonale). Cu indici de la 1: Nord: i < j și i + j < n + 1 (deasupra ambelor diagonale); Sud: i > j și i + j > n + 1 (sub ambele diagonale); Est: i < j și i + j > n + 1 (deasupra principalei, sub secundară); Vest: i > j și i + j < n + 1 (sub principală, deasupra secundarei). Se afișează suma elementelor din fiecare zonă.

Complexity
O(n * n)
Grade
Grade 10 (Clasa a X-a)

Examples

Example 1

Input

5
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

Expected output

N 17
S 87
E 59
V 45

The code

Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.

zonele-matricei-patratice.cpp
/*
 * Titlu: Cele patru zone ale matricei pătratice
 * Clasa: 10
 * Capitol: Tablouri bidimensionale (matrice)
 * Descriere: Cele două diagonale împart o matrice pătratică în patru zone (fără
 *            elementele de pe diagonale). Cu indici de la 1:
 *            Nord: i < j și i + j < n + 1 (deasupra ambelor diagonale);
 *            Sud: i > j și i + j > n + 1 (sub ambele diagonale);
 *            Est: i < j și i + j > n + 1 (deasupra principalei, sub secundară);
 *            Vest: i > j și i + j < n + 1 (sub principală, deasupra secundarei).
 *            Se afișează suma elementelor din fiecare zonă.
 * Complexitate: O(n * n)
 *
 * Exemplu
 * Intrare:
 * 5
 * 1 2 3 4 5
 * 6 7 8 9 10
 * 11 12 13 14 15
 * 16 17 18 19 20
 * 21 22 23 24 25
 * Ieșire:
 * N 17
 * S 87
 * E 59
 * V 45
 */
#include <iostream>
using namespace std;

int a[101][101];

int main()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            cin >> a[i][j];

    int nord = 0, sud = 0, est = 0, vest = 0;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            if (i < j && i + j < n + 1)
                nord += a[i][j];
            else if (i > j && i + j > n + 1)
                sud += a[i][j];
            else if (i < j && i + j > n + 1)
                est += a[i][j];
            else if (i > j && i + j < n + 1)
                vest += a[i][j];
        }
    }
    cout << "N " << nord << '\n';
    cout << "S " << sud << '\n';
    cout << "E " << est << '\n';
    cout << "V " << vest << '\n';
    return 0;
}

Runs on a real g++ (C++17, -O2) through Compiler Explorer. Keep runs short; there's a time limit.