|
|
Mensaje: #1
Cuadrado Mágico
Un cuadrado mágico es una tabla donde se dispone de una serie de números enteros en un cuadrado o matriz de forma tal que la suma de los números por columnas, filas y diagonales principales sea la misma, la constante mágica. Usualmente los números empleados para rellenar las casillas son consecutivos, de 1 a n², siendo n el número de columnas y filas del cuadrado mágico.
El algoritmo usado por el código que les dejo a continuación sería el siguiente:
Código:
1º Colocamos el 1 en la mitad de la primera fila
2º colocamos el siguiente número en la casilla superior izquierda al último número que habíamos colocado
3º Repetimos paso 2 hasta que nos topemos con una casilla con un número. En tal caso, el siguiente número se colocaría en la casilla inferior al último número colocado.
4º Repetimos paso 2 y 3 hasta completar el cuadrado
Y aquí el código en python:
Lenguaje PYTHON
def pedirOrden():
bien = False
orden = 0
while bien==False:
orden = input("Introduzca el orden de la matriz(>1 e impar): ")
if (orden>1) and (orden%2!=0):
matriz["orden"]=orden
bien = True
for i in range(orden):
matriz["cuadrado"].append([])
for j in range(orden):
matriz["cuadrado"][i].append(0)
def crearMagico():
fila=0
columna=matriz["orden"]/2
num=1
while (num<=matriz["orden"]**2):
matriz["cuadrado"][fila][columna]=num
num+=1
fila-=1
columna-=1
if columna<0:
columna = matriz["orden"]-1
if fila<0:
fila = matriz["orden"]-1
if matriz["cuadrado"][fila][columna]!=0:
fila += 2
columna+=1
if columna>=matriz["orden"]:
columna -= matriz["orden"]
if fila>=matriz["orden"]:
fila -= matriz["orden"]
def mostrarMatriz():
for i in range(matriz["orden"]):
for j in range(matriz["orden"]):
print "%i | " % (matriz["cuadrado"][i][j]),
print "\n"
def main():
cuadrado=[]
global matriz
matriz={"cuadrado":cuadrado, "orden":0}
pedirOrden()
crearMagico()
mostrarMatriz()
if __name__ == "__main__":
main()
![[Imagen: moderadorglobal.png]](http://img832.imageshack.us/img832/3400/moderadorglobal.png)
|
|
| 28-01-2012 10:53 PM |
|