Asuntos Oficiales > Retos

 Cuadrado Magico

(1/2) > >>

anoraxis:
el reto que presento es sencillo. Se trata de programar una aplicación que genere una matriz de numero enteros en los que se cumpla que la suma de todas las columnas y filas y diagonales sea la misma. Los números en la matriz deben ser desde 1 hasta n elevado al cuadrado donde n es la cantidad de filas y columnas de cuadrado. obviamente no se pueden repetir números. por ejemplo para un cuadrado de dimensión 3 la salida debe ser

8  1  6
3  5  7
4  9  2

el programa debe aceptar como entrada el numero n (cantidad de filas y columnas del cuadrado) y devolver algo como lo anterior.

creo que 15 días son suficiente para esto.

saludos y que no les pase  :hitcomp:

m0skit0:
No creo que un nuevo miembro deba postear retos...

posman:
Ademas no es ningun reto. Existen reglas para llenar ese cuadro.

Primero, la matriz debe ser de numeros impares (3x3, 5x5, 7x7, etc).
1. El numero 1 se coloca en la fila de arriba en el lugar del medio


--- Código: Text ---. 1 .. . .. . . 
2. Los numeros se escriben del 1 al 9. El siguiente numero se coloca un lugar arriba y a la derecha. Me explico. Para el movimiento hacia arriba, si el numero anteriror se coloco en la fila de hasta arriba, el siguiente numero se coloca en la fila de abajo y una casilla a la derecha. Para el movimiento a la derecha, si el numero anterior esta en la columna de la derecha, el siguiente numero se colocaria en la columna de la izquierda


--- Código: Text ---. 1 .          . 1 .. . .          3 . .. . 2          . . 2 
3. Cuando el ultimo numero escrito es multiplo del tamaño de la matriz (en este caso 3,6,9), el siguiente numero se coloca debajo de ese numero


--- Código: Text ---. 1 .3 . .4 . 2 
4. Se continua con el paso 2


--- Código: Text --- . 1 6          . 1 6          8 1 63 5 .          3 5 7          3 5 74 . 2          4 . 2          4 9 2 
Como mencione, estos pasos aplican para todas las matrices de tamaño impar:


--- Código: Text --- 17   24    1  8   1523    5    7  14  16 4    6   13  20  2210   12   19  21   311   18   25   2   9 

posman:

--- Código: Text ---#include <stdio.h> char *matriz;char n;int cuad; void guardarValor(lin, col, valor) {    int pos = ((lin-1)*n) + (col-1);    matriz[pos] = valor;}void imprimeMatriz() {    int cont;    for(cont=1;cont<=cuad;cont++) {        printf("%dt",matriz[cont-1]);        if ( cont%n == 0 ) printf("n");    }}int main() {    int cont, posL, posC;     n = 5;    cuad = n*n;    matriz = (char *)malloc(cuad*sizeof(char));    //reservar memoria    for(cont=0;cont<cuad;cont++) matriz[cont] = 0; //inicializar matriz     cont = 1;    posL = 1;     //primer linea    posC = n/2+1; //celda intermedia    while ( cont<=cuad ) {        guardarValor(posL,posC,cont);        if ( cont%n == 0 ) { //si el numero es multiplo de n            posL++; //unicamente aumentar la linea        } else {            posL--;            //si es menor de la primer linea            //escribir numero en la ultima linea            if ( posL < 1 ) posL = n;             posC++;            //si es mayor que la ultima columna            //escribir numero en la primer columna            if ( posC > n ) posC = 1;        }        cont++;    }    imprimeMatriz();    free(matriz);    return 0;} 

m0skit0:
Hala, ya tienes la tarea hecha :P

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa