3124 - Patrat Magic 0: Diferență între versiuni
De la Universitas MediaWiki
(→Enunt) |
(→Enunt) |
||
Linia 1: | Linia 1: | ||
== Enunt == | == Enunt == | ||
Un Pătrat Magic este un pătrat ce conține numerele de la 1 la <math>n^2 <math | Un Pătrat Magic este un pătrat ce conține numerele de la 1 la <math>n^2 <math/>î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 == | == Cerința == |
Versiunea de la data 1 ianuarie 2024 21:36
Enunt
Un Pătrat Magic este un pătrat ce conține numerele de la 1 la <math>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
#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()