2877 - Sort Matrix Lin Col

De la Universitas MediaWiki

Cerinţa

Se dă o matrice pătratică de dimensiune n. Să se ordoneze crescător fiecare linie a matricei, apoi să se ordoneze crescător fiecare coloană a acesteia.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi elementele matricei. Fiecare linie se află pe câte un rând, elementele fiecărei linii fiind separate prin câte un spațiu.

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 matricea modificată, câte o linie a matricei pe o linie a ecranului, elementele fiecărei linii fiind separate prin câte 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 ⩽ 100
  • elementele matricei vor fi mai mici decât 1.000.000

Exemplul 1

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

Exemplul 2

Intrare
4
12 7 1 8
20 9 11 2
15 4 5 13
3 18 10 6
Ieșire
Datele sunt introduse corect.
1 5 8 12
2 6 10 15
3 7 11 18
4 9 13 20

Rezolvare

# Funcție de validare a datelor de intrare conform cerințelor problemei.
def validare_date_intrare(n, a):
    if not 1 <= n <= 100:
        return False
    for linie in a:
        for elem in linie:
            if elem > 999:
                return False
    return True

# Funcția principală care primește matricea și returnează matricea ordonată crescător pe fiecare linie și coloană.
def ordonare_matrice(n, a):
    for i in range(n):
        a[i].sort()  # ordonare crescătoare pe linii
    a_transpusa = [list(x) for x in zip(*a)]  # transpunerea matricei
    for i in range(n):
        a_transpusa[i].sort()  # ordonare crescătoare pe coloane
    a_ordonata = [list(x) for x in zip(*a_transpusa)]  # transpunerea inversă a matricei
    return a_ordonata

if __name__ == '__main__':
    n = int(input())
    a = [list(map(int, input().split())) for _ in range(n)]
    if not validare_date_intrare(n, a):
        print("Datele nu corespund restricțiilor impuse.")
    else:
        print("Datele sunt introduse corect.")
        a_ordonata = ordonare_matrice(n, a)
        for linie in a_ordonata:
            print(*linie)