0782 - Zona 1

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 care apar sub diagonala principală și sub diagonala secundară de cel puţin 2 ori. Fiecare valoare 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 numărul, în ordine strict crescătoare, valorile cerute, separate printr-un spaţiu.Î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 3 2 3 6
8 9 3 3 9 6
Ieșire
Datele sunt introduse corect.
3 9

Rezolvare

def validare_date(n, a):
    # Verificăm dacă matricea respectă restricția impusă
    # și anume să conțină elemente mai mici decât 200.
    for i in range(n):
        for j in range(n):
            if a[i][j] >= 200:
                return False
    return True

def valorile_sub_diagonala(n, a):
    # Parcurgem matricea și adaugăm elementele sub diagonala secundară
    # și peste diagonala principală în lista v.
    v = []
    for i in range(n):
        for j in range(n):
            if i > j and i + j > n - 1:
                v.append(a[i][j])
    # Sortăm lista v în ordine crescătoare și căutăm elementele care se repetă și apar de cel puțin 2 ori.
    v.sort()
    rezultat = []
    for i in range(1, len(v)):
        if v[i] == v[i-1] and v[i] not in rezultat:
            rezultat.append(v[i])
    return rezultat

if __name__ == "__main__":
    # Citim dimensiunea matricei și elementele acesteia.
    n = int(input())
    a = []
    for i in range(n):
        linie = input()
        a.append([int(x) for x in linie.split()])
    # Verificăm dacă matricea este validă și afișăm valorile care respectă condițiile problemei, în ordine crescătoare.
    if not validare_date(n, a):
        print("Datele nu corespund restrictiilor impuse.")
    else:
        rezultat = valorile_sub_diagonala(n, a)
        print("Datele sunt introduse corect.")
        for x in rezultat:
            print(x, end=" ")
        print()