Ejercicio: 3Eva_IT2003_T2 Verificar un cuadrado mágico
Propuesta de solución en Python: py_pdf, también se incluye versión en matlab: m_pdf
El problema se separa en sus partes principales.
Primero se revisa el número de veces que aparece cada número en el cuadrado. Luego se suma cada fila y columna, guardando los resultados en vectores.
La suma de las diagonales se las hace aparte pues solo se necesita mover un índice; la diagonal principal tiene el mismo índice en la fila y columna; y la diagonal segundaria, en cambio la columna es decreciente.
Se validan los resultados parciales con las condiciones para que sea mágico y se muestra el resultado
# ICM00794-Fundamentos de Computación - FCNM-ESPOL # 3Eva_IT2003_T2 Verificar un cuadrado mágico # Propuesta: edelros@espol.edu.ec import numpy as np # INGRESO n = int(input("tamaño cuadrado: ")) while (n>10): n = int(input("tamaño cuadrado(n<10): ")) cuadrado = np.zeros(shape=(n,n),dtype=int) for i in range(0,n,1): for j in range(0,n,1): cuadrado[i,j] = input("cuadrado ["+str(i+1)+","+str(j+1)+"]: ") # PROCEDIMIENTO # verifica numeros repetidos m = n*n repetido = np.zeros(m+1,dtype=int) masdeuno = 0 for i in range(0,n,1): for j in range(0,n,1): k = cuadrado[i,j] repetido[k]=repetido[k]+1 if (repetido[k]>1): masdeuno = k #suma de filas y columnas sfila = np.zeros(n,dtype=int) scolumna = np.zeros(n,dtype=int) for i in range(0,n,1): for j in range(0,n,1): sfila[i] = sfila[i] + cuadrado[i,j] scolumna[i] = scolumna[i] + cuadrado[j,i] # Suma diagonales sdiagonal = 0 sdiagonal2 = 0 for i in range(0,n,1): sdiagonal = sdiagonal + cuadrado[i,i] sdiagonal2 = sdiagonal2 + cuadrado[i,n-1-i] # verifica condiciones magico magico = 1 if (masdeuno>0): magico = 0 if not(sdiagonal==sdiagonal2): magico = 0 for i in range(0,n,1): if not(sdiagonal==sfila[i]): magico = 0 if not(sdiagonal==scolumna[i]): magico = 0 # SALIDA print("El resultado es:") print(magico)
resultado del algoritmo
tamaño cuadrado: 3 cuadrado [1,1]: 4 cuadrado [1,2]: 9 cuadrado [1,3]: 2 cuadrado [2,1]: 3 cuadrado [2,2]: 5 cuadrado [2,3]: 7 cuadrado [3,1]: 8 cuadrado [3,2]: 1 cuadrado [3,3]: 6 El resultado es: 1 >>>