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 M e determine se M é 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

Passo 1

O enunciado pede uma função em Python que receba uma matriz quadrada magicsum = sumj=0^n-1 M[0][j] 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

Exercícios relacionados