3124 - Patrat Magic 0
Enunt
Un Pătrat Magic este un pătrat ce conține numerele de la 1 la n^2 în care sumele fiecăror linii, coloane și a celor două diagonale sunt egale. Această sumă se mai numește și constanta pătratului magic.
Cerința
Se dă un număr natural n, urmat de o matrice pătratică cu n * n elemente, numere naturale. Să se verifice dacă matricea dată este un pătrat magic.
Date de intrare
Programul citește de la tastatură numărul n, iar apoi n * n numere naturale, reprezentând elementele matricei.
Date de ieșire
Programul va afișa pe ecran true dacă matricea dată este un pătrat magic sau false dacă nu este.
Restricții și precizări
- 3 ⩽ n ⩽ 500
- cele n numere citite vor fi mai mici sau egale decât 250.000
Exemplu 1
- Intrare
- 3
- 4 9 2
- 3 5 7
- 8 1 6
- Ieșire
- true
Exemplu 2
- Intrare
- 3
- 1 2 3
- 1 2 3
- 0 9 1
- Iesire
- false
Exemplu 3
- Intrare
- 2
- Ieșire
- Nu au fost respectate cerintele impuse
Rezolvare
<syntaxhighlight lang="python" line>
- 3124 - PatratMagic0
def is_magic_square(n, matrix):
# Verificare daca elementele matricei sunt distincte distinct_numbers = set() for row in matrix: for num in row: if num <= 0 or num > n ** 2 or num in distinct_numbers: return False distinct_numbers.add(num)
# Calcularea constantei magice magic_constant = n * (n ** 2 + 1) // 2
# Verificare sume pe linii for row in matrix: if sum(row) != magic_constant: return False
# Verificare sume pe coloane for j in range(n): if sum(matrix[i][j] for i in range(n)) != magic_constant: return False
# Verificare suma pe diagonala principala if sum(matrix[i][i] for i in range(n)) != magic_constant: return False
# Verificare suma pe diagonala secundara if sum(matrix[i][n - i - 1] for i in range(n)) != magic_constant: return False
return True
def main():
try: # Citirea datelor de intrare n = int(input("Introduceti n: ")) if not (3 <= n <= 500): raise ValueError("Nu a fost respectata restrangerea pentru n.")
matrix = [] print("Introduceti elementele matricei:") for _ in range(n): row = list(map(int, input().split())) if len(row) != n or any(num > 250000 for num in row): raise ValueError("Nu au fost respectate cerintele impuse.") matrix.append(row)
# Verificarea daca matricea este un patrat magic result = is_magic_square(n, matrix)
# Afisarea rezultatului print(result)
except ValueError as e: print(f"Nu au fost respectate cerintele impuse: {e}")
if __name__ == "__main__":
main()
</syntaxhighlight>