0729 - Zona

De la Universitas MediaWiki
Versiunea din 26 aprilie 2023 12:32, autor: Alexandra Leș (discuție | contribuții) (Pagină nouă: == 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...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

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.")