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 la0și sunt de tipint; - matricea folosită în apelul din funcția
mainva fi declaratăint a[100][100];și are elementele indexate de la0.
Exemplu
Pentru n=2, m=6 și A=(572186439835)A=(528493716385) funcția va returna valoarea 2 (elementele șa sunt A0,1A0,1 și A1,4A1,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.
SOLUTIE
int nr_sa(int a[][100], int m ,int n)
{
int cnt = 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) )
cnt ++;
}
return cnt;
}