Rezolvare completă PbInfo #1508 Element_SA

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.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Element_SA :

#define N 100
void determinare_linie(int linii, int coloane, int matrice[N][N], int indice_linie, int &minim, int &maxim)
{
    minim = maxim = matrice[indice_linie][0];

    for(int col = 1; col < coloane; col++)
    {
        if(matrice[indice_linie][col] > maxim)
            maxim = matrice[indice_linie][col];

        if(matrice[indice_linie][col] < minim)
            minim = matrice[indice_linie][col];
    }
}

void determinare_coloana(int linii, int coloane, int matrice[N][N], int indice_coloana, int &minim, int &maxim)
{
    minim = maxim = matrice[0][indice_coloana];

    for(int lin = 1; lin < linii; lin++)
    {
        if(matrice[lin][indice_coloana] > maxim)
            maxim = matrice[lin][indice_coloana];

        if(matrice[lin][indice_coloana] < minim)
            minim = matrice[lin][indice_coloana];
    }
}

int nr_sa(int matrice[N][N], int linii, int coloane)
{
    int minim_linie[N], minim_coloana[N], maxim_linie[N], maxim_coloana[N];

    for(int lin = 0; lin < linii; lin++)
        determinare_linie(linii, coloane, matrice, lin, minim_linie[lin], maxim_linie[lin]);

    for(int col = 0; col < coloane; col++)
        determinare_coloana(linii, coloane, matrice, col, minim_coloana[col], maxim_coloana[col]);

    int numar_elemente_sa = 0;

    for(int lin = 0; lin < linii; lin++)
        for(int col = 0; col < coloane; col++)
            if((matrice[lin][col] == maxim_coloana[col] && matrice[lin][col] == minim_linie[lin])
               ||
               (matrice[lin][col] == minim_coloana[col] && matrice[lin][col] == maxim_linie[lin]))
               numar_elemente_sa++;

    return numar_elemente_sa;

}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #1508 Element_SA

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1508 Element_SA de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!