Asuntos Oficiales > Retos
Cuadrado Magico
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
[#] Página Siguiente
Ir a la versión completa