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 la0
și sunt de tipint
; - matricea folosită în apelul din funcția
main
va fi declaratăint a[100][100];
și are elementele indexate de la0
.
– 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.
int nr_sa(int a[][100], int n, int m){ int minlin[100], maxlin[100], mincol[100], maxcol[100]; for(int i = 0; i < n; ++i){ int mini = 2000000001; int maxi = 0; for(int j = 0; j < m; ++j){ if(a[i][j] < mini) mini = a[i][j]; if(a[i][j] > maxi) maxi = a[i][j]; } minlin[i] = mini; maxlin[i] = maxi; } for(int j = 0; j < m; ++j){ int mini = 2000000001; int maxi = 0; for(int i = 0; i < n; ++i){ if(a[i][j] < mini) mini = a[i][j]; if(a[i][j] > maxi) maxi = a[i][j]; } maxcol[j] = maxi; mincol[j] = mini; } int cnt = 0; for(int i = 0; i < n; ++i) for(int j = 0; j < m; ++j) if((a[i][j] == maxlin[i] && a[i][j] == mincol[j]) || (a[i][j] == minlin[i] && a[i][j] == maxcol[j])) cnt++; return cnt; }