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)