0786 - Mat Sim

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Cerinţa

Se dă o matrice cu n linii şi n coloane şi elemente numere naturale. Să se construiască o matrice care să fie simetrica față de diagonala principală a matricei date.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n*n numere naturale, separate prin spaţii, reprezentând 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 elementele matricei construite, câte o linie a matricei pe o linie a ecranului, elementele de pe o linie 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 ⩽ 20
  • elementele matricei vor fi mai mici decât 1.000.000
  • două matrice A și B sunt simetrice față de diagonala principală dacă A[i,j]=B[j,i], pentru orice i,j. principală sunt nenule

Exemplu

Date de intrare
4
3 1 8 5
7 8 5 1
2 2 6 7
9 8 1 3
Date de ieșire
Datele sunt introduse corect.
3 7 2 9
1 8 2 8
8 5 6 1
5 1 7 3

Rezolvare

#Funcția care verifică dacă datele introduse corespund restricțiilor impuse 
def valideaza_matrice(matrice):
    for i in range(n):
        for j in range(n):
            if matrice[i][j] >= 1000000:
                return False
    return True

def construieste_matrice_simetrica(matrice):
    if not valideaza_matrice(matrice):
        return None
    # Construiește matricea simetrică
    matrice_simetrica = [[0 for j in range(n)] for i in range(n)]
    for i in range(n):
        for j in range(n):
            matrice_simetrica[i][j] = matrice[j][i]
    return matrice_simetrica

# Funcția principală
if __name__ == '__main__':
    # Citirea datelor de la tastatură
    n = int(input())
    matrice = [[0 for j in range(n)] for i in range(n)]
    for i in range(n):
        linie = input().split()
        for j in range(n):
            matrice[i][j] = int(linie[j])

    # Construirea și afișarea matricei simetrice
    matrice_simetrica = construieste_matrice_simetrica(matrice)
    if matrice_simetrica is not None:
        for i in range(n):
            for j in range(n):
                print(matrice_simetrica[i][j], end=" ")
            print()
        print("Datele sunt introduse corect.")
    else:
        print("Datele nu corespund restricțiilor impuse.")