Um quadrado mágico é uma matriz quadrada formada de números inteiros onde a soma de qualquer coluna, linha, diagonal principal ou diagonal secundária é sempre o mesmo valor. Escreva uma função em Python que receba uma matriz quadrada
e determine se
é ou não um quadrado mágico.
17
24
1
8
15
23
5
7
14
16
4
6
13
20
22
10
12
19
21
3
11
18
25
2
9
17 | 24 | 1 | 8 | 15 |
23 | 5 | 7 | 14 | 16 |
4 | 6 | 13 | 20 | 22 |
10 | 12 | 19 | 21 | 3 |
11 | 18 | 25 | 2 | 9 |
Passo 1
O enunciado pede uma função em Python que receba uma matriz quadrada
e diga se ela é um quadrado mágico. Estamos trabalhando com estruturas de repetição (loops), acesso a listas (ou listas de listas) e soma de elementos. Para resolver, vamos precisar:
- Identificar o tamanho
da matriz. - Calcular a “soma mágica” a partir da primeira linha:
- Verificar se todas as linhas, colunas e as duas diagonais têm soma igual a
.
Passo 2
Primeiro, a gente define a função e pega o tamanho da matriz:
def eh_quadrado_magico(M):
n = len(M) # número de linhas (e também de colunas)
Aqui usamos
len(M)
para saber quantas linhas tem; em um quadrado, também são n colunas.Passo 3
Agora calculamos a soma que deve ser igual para tudo (magic_sum), somando os elementos da primeira linha:
magic_sum = sum(M[0]) # soma de M[0][0] até M[0][n-1]
Em matemática é
.
Passo 4
Verificamos as somas de todas as linhas. Se alguma for diferente de
magic_sum
, já devolvemos False: for i in range(n):
if sum(M[i]) != magic_sum:
return False
Isso garante que cada linha
satisfaz
.
Passo 5
Fazemos o mesmo pras colunas: para cada coluna
, somamos
.
for j in range(n):
s = 0
for i in range(n):
s += M[i][j]
if s != magic_sum:
return False
Passo 6
Falta só checar as diagonais. A diagonal principal soma
e a secundária soma
.
# diagonal principal
dp = sum(M[i][i] for i in range(n))
if dp != magic_sum:
return False
# diagonal secundária
ds = sum(M[i][n-1-i] for i in range(n))
if ds != magic_sum:
return False
return True
Resposta
def eh_quadrado_magico(M):
n = len(M)
magic_sum = sum(M[0])
for i in range(n):
if sum(M[i]) != magic_sum:
return False
for j in range(n):
s = 0
for i in range(n):
s += M[i][j]
if s != magic_sum:
return False
dp = sum(M[i][i] for i in range(n))
if dp != magic_sum:
return False
ds = sum(M[i][n-1-i] for i in range(n))
if ds != magic_sum:
return False
return True
# Exemplo de uso
M = [
[17,24,1,8,15],
[23,5,7,14,16],
[4,6,13,20,22],
[10,12,19,21,3],
[11,18,25,2,9]
]
print(eh_quadrado_magico(M)) # True