# PBinfo #1508 – element-sa – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Cerința
Să se scrie o funcție C++ care are ca parametri două numere naturale n și m și o matrice A(n , m) avȃnd elemente numere întregi și returnează numărul de elemente „șa” din matrice. Un element A(i,j) din matrice se numește element „șa” dacă este maximul de pe coloana j si minimul de pe linia i sau invers.

Subprogramul se va numi nr_sa va avea trei parametri: a, un tablou bidimensional cu elemente întregi, n, m, reprezentând numărul de linii, respectiv de coloane ale tabloului a.

Restricţii şi precizări

0 < n,m ≤ 100
numele subprogramului cerut este nr_sa
parametrii sunt, în această ordine: a, n, m
indicii de linie și de coloana ai tabloului a încep de la 0 și sunt de tip int;
matricea folosită în apelul din funcția  main va fi declarată int a[100][100]; și are elementele indexate de la 0.

Exemplu:
Pentru n=2, m=6 și \( A = \left( \begin{array}{cccccc}
5 & 2 & 8 & 4 & 9 & 3 \\
7 & 1 & 6 & 3 & 8 & 5 \end{array} \right)\) funcția va returna valoarea 2 (elementele șa sunt \(A_{0,1} \) și \( A_{1,4}\) – elementele sunt indexate de la 0).

Important
Soluţia propusă va conţine doar definiţia subprogramului cerut. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

## Cod sursă C++

```cpp
int nr_sa(int a[][100], int m, int n) {
    int sa = 0;
    for (int i = 0; i < m; i++)
        for (int j = 0; j < n; j++){
            int min_lin, max_lin, min_col, max_col;
            min_lin = max_lin = min_col = max_col = a[i][j];
            for (int k = 0; k < n; k++) {
                if (a[i][k] > max_lin) max_lin = a[i][k];
                if (a[i][k] < min_lin) min_lin = a[i][k];
            } for (int k = 0; k < m; k++) {
                if (a[k][j] > max_col) max_col = a[k][j];
                if (a[k][j] < min_col) min_col = a[k][j];
            }
            if ((a[i][j] == min_col && a[i][j] == max_lin) || (a[i][j] == max_col && a[i][j] == min_lin)) sa++;
        } return sa;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/1508)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/1508/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-1508/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
