0081 - Matrice

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Scrieţi un program care citeşte de la tastatură un număr natural n ( 1 ≤ n ≤ 20 ) şi apoi elementele unui tablou bidimensional cu n linii şi n coloane, care memorează numere naturale. Programul afişează pe ecran numărul de elemente din tablou care sunt strict mai mari decât toate elementele cu care se învecinează direct (aflate pe aceeaşi linie dar pe o coloană alăturată sau pe aceeaşi coloană dar pe o linie alăturată).

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi n*n numere naturale, separate prin spaţii.

Date de ieşire[edit | edit source]

Dacă datele sunt introduse corect,pe ecran se va afișa :"Datele sunt introduse corect.",apoi pe un rând nou numărul de elemente din tablou care respectă regula.În cazul contrar,se va afișa pe ecran "Datele nu corespund restricțiilor impuse.".

Restricții și precizări[edit | edit source]

  • 1 ⩽ n ⩽ 20
  • elementele matricei vor fi mai mici decât 1.000.000

Exemplu[edit | edit source]

Intrare
4
1 5 1 1
2 1 2 3
1 3 4 2
2 1 2 1
Date de ieșire
Datele sunt introduse corect.
5

Explicație[edit | edit source]

Elementele din matrice care respectă regula sunt: 5 2 3 4 2

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

def validare_date(n, matrice):

   # Verifică dimensiunea matricei
   if n < 1 or n > 20:
       return False
   # Verifică dacă elementele matricei sunt numere naturale
   for linie in matrice:
       for element in linie:
           if not isinstance(element, int) or element < 0:
               return False
   # Datele sunt valide
   return True


def rezolva_problema(n, matrice):

   numar_elemente= 0
   # Verifică fiecare element din matrice
   for i in range(n):
       for j in range(n):
           este_maxim = True
           # Verifică dacă există un element vecin mai mare
           if i > 0 and matrice[i-1][j] > matrice[i][j]:
               este_maxim = False
           if i < n-1 and matrice[i+1][j] > matrice[i][j]:
               este_maxim = False
           if j > 0 and matrice[i][j-1] > matrice[i][j]:
               este_maxim = False
           if j < n-1 and matrice[i][j+1] > matrice[i][j]:
               este_maxim = False
           # Dacă este maxim, crește numărul de elemente găsite
           if este_maxim:
               numar_elemente+= 1
   # Returnează numărul de elemente găsite
   return numar_elemente


if __name__ == '__main__':

   # Citirea datelor de intrare
   n = int(input())
   matrice = []
   for i in range(n):
       linie = [int(x) for x in input().split()]
       matrice.append(linie)
   # Verificarea datelor de intrare
   if not validare_date(n, matrice):
       print("Datele nu corespund restricțiilor impuse.")
   else :
   # Rezolvarea problemei și afișarea rezultatului
       rezultat = rezolva_problema(n, matrice)
       print("Datele sunt introduse corect.")
       print(rezultat)


</syntaxhighlight>