C/Visual C - "cuadro magico" "URGENTE"

 
Vista:

"cuadro magico" "URGENTE"

Publicado por Javier Campo (1 intervención) el 27/09/2000 00:00:00
necesito un programa llamado el cuadro magico el cual e suna matriz impar ejemplo de 3 * 3, 5*5 el programa consiste en llenar la matriz y luego por donde se agarrela la suma de sus numero debe dar lo mismo ejemplo si se agarra una fila debe dar lo mismo que si se agarrara una columna u otrafila o la diagonal. Espero que me ayuden....
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:

Publicado por Pedro Pablo (37 intervenciones) el 27/09/2000 00:00:00
Yo conozco un algoritmo para hacerlo. El problema es que no recuerdo la forma en la que
se elige el número sumado.
Me explico. Supongamos que el cuadrado es de NxN (N es la cantidad de números en
cada lado, que tendrá que ser impar). El algoritmo que conozco consiste en ir colocando los
números del 1 al NxN en la matriz. Eso origina que la suma sea (NxN+1)*(N/2). ¿Por qué?
Supongamos que es de 3x3. Tendremos en el cuadrado los números 1..9, que sumados dan
45 (NxN+1)*(NxN/2). Para saber lo que da la suma de cada fila/columna del cuadrado mágico
hay que darse cuenta de que realmente cada número se suma dos veces (de momento nos
olvidamos de las diagonales), pues cada número participa en una fila y una columna. Total
que las sumas de los resultados de sumar las filas y columnas da, en el cuadrado de 3x3,
90, y en general, (NxN+1)*(NxN)
¿Cuanto da cada suma individual? Tenemos N sumas de filas, y N sumas de columnas, por
lo que habrá que dividir el valor anterior por 2N. En el de 3x3 da 15. En el de NxN da la
primera expresión.

Bueno, pues el caso es que en teoría se pueden utilizar otros números distintos de 1..NxN.
El problema es que con todo lo anterior, no se cuentan las diagonales. Si utilizamos los
números 2..10 con el algoritmo, la suma de filas y columnas es correcta, pero las de las
diagonales no. Y no recuerdo qué propiedad tenía que cumplir el rango de números a usar
para que las diagonales se conservaran :-(

De todas formas, el algoritmo es el siguiente. Se comienza colocando el valor NxN en el
cuadrado, en la posición central de la columna izquierda. Luego iremos colocando el (NxN) - 1,
el (NxN)-2, y así hasta poner el 1. Las posiciones se obtienen de forma sencilla. El valor
x se coloca en la casilla que quede debajo a la izquierda de la posición en la que esté el
número (x+1). Si la matriz se nos acaba por abajo, se pasa a arriba, y si se nos acaba
por la izquierda, se pasa a la derecha.
Además, si la casilla final está ocupada, el número x se coloca a la derecha del número x+1.
Por ejemplo:
_ _ _
9 _ _
_ _ _

_ _ _
9 _ _
_ _ 8

_ 7 _
9 _ _
_ _ 8

_ 7 6
9 _ _
_ _ 8

...

y al final...

2 7 6
9 5 1
4 3 8

Debido a la simetría, se puede hacer empezando por otro sitio y con otras direcciones, pero
eso si quieres lo miras tú ;-)

¡Espero que te sirva!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar