0081 - Matrice

De la Universitas MediaWiki

Cerinţa

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

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

Date de ieşire

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

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

Exemplu

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

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

Rezolvare

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)