0729 - Zona

De la Universitas MediaWiki

Cerinţa

Se dă o matrice pătratică cu n linii și n coloane și elemente numere naturale mai mici decât 1000. Să se afișeze în ordine strict crescătoare valorile situate sub diagonala principală și deasupra diagonalei secundare. Dacă o valoare apare în zona respectivă de mai multe ori, se va afișa o singură dată.

Date de intrare

Programul citește de la tastatură numărul n, apoi elementele matricei, linie cu linie.

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,în ordine strict crescătoare, valorile cerute, separate prin spații.În cazul contrar,se va afișa pe ecran "Datele nu corespund restricțiilor impuse.".

Restricții și precizări

  • 1 ⩽ n ⩽ 200

Exemplu

Intrare
6
10 8 5 8 4 2
6 5 3 1 3 8
8 1 4 7 8 8
5 1 9 6 6 1
8 9 10 1 3 6
8 2 3 3 9 6
Ieșire
Datele sunt introduse corect.
1 5 6 8

Rezolvare

# Functia de validare pentru matricea de intrare.
def validare(n: int, a: list[list[int]]) -> bool:

    # Verificăm dacă n se află în intervalul specificat
    if n < 1 or n > 200:
        return False
    # Verificăm dacă fiecare element al matricei se află în intervalul [0, 1000)
    for i in range(n):
        for j in range(n):
            if a[i][j] < 0 or a[i][j] >= 1000:
                return False
    return True


# Funcția care rezolvă problema și returnează valorile cerute.
def rezolva_matrice(n: int, a: list[list[int]]) -> list[int]:
    # Inițializăm un vector v de dimensiune 1000, initial cu valori 0
    v = [0] * 1000
    # Parcurgem matricea și setăm elementele corespunzătoare din v pe 1 dacă se află sub diagonala principală și
    # deasupra diagonalei secundare
    for i in range(n):
        for j in range(n):
            if i > j and i + j < n - 1:
                v[a[i][j]] = 1
    # Inițializam o lista rezultat cu valorile de 0 și apoi adaugăm valorile de 1 din v in ordine crescătoare
    rezultat = []
    for i in range(1000):
        if v[i] == 1:
            rezultat.append(i)
    return rezultat


# Programul principal
if __name__ == '__main__':
    # Citim n și matricea de la tastatură
    n = int(input())
    a = []
    for i in range(n):
        a.append(list(map(int, input().split())))

    # Verificăm dacă matricea îndeplineste cerințele problemei
    if validare(n, a):
        # Dacă matricea este validă, rezolvăm problema și afișăm rezultatul
        rezultat = rezolva_matrice(n, a)
        print("Datele sunt introduse corect.")
        print("Valorile cerute sunt:", " ".join(map(str, rezultat)))
    else:
        # Dacă matricea nu este valida, afișăm un mesaj corespunzator
        print("Datele nu corespund restricțiilor impuse.")