Explicación de como llenar un cuadro mágico
public class Recursividad4 { //precondicion //matriz.length%2!=0 public static int[][] cuadroMagico(int n){ int matriz[][]=new int[n][n]; int contador=1; int c_ult=0; int f_ult=0; int c_sig=n/2; int f_sig=0; for (int i = 0; i<n; i++){ for (int j = 0; j<n; j++){ //guardamos el numero en la matriz matriz[f_sig][c_sig]=contador; //guardamos la ultima posicion donde guardamos algo f_ult=f_sig; c_ult=c_sig; //primer paso para la siguiente posicion f_sig=f_ult-1; c_sig=c_ult+1; if(f_sig<0){ f_sig=n-1; } if(c_sig>=n){ f_sig=f_ult-1; c_sig=0; } if(f_sig==-1 || matriz[f_sig][c_sig]!=0){ f_sig=f_ult+1; c_sig=c_ult; } contador++; } } return matriz; } public static String vectorToString(int vector[], int i){ if(i>=vector.length){ return "|"; }else{ if(vector[i]<10){ return "| "+vector[i]+" "+vectorToString(vector,i+1); }else{ return "| "+vector[i]+" "+vectorToString(vector,i+1); } } } public static int sumatoriaVector(int vector[],int indice, int suma){ if(indice>=vector.length){ return suma; } suma=suma+vector[indice]; return sumatoriaVector(vector,indice+1,suma); } public static int[] getColumna(int m[][],int columna[],int c, int f){ if(f>=m.length){ return columna; } columna[f]=m[f][c]; return getColumna(m,columna, c, f+1); } public static int[] getDiagonal(int m[][],int diagonal[],int c){ if(c>=m.length){ return diagonal; } diagonal[c]=m[c][c]; return getDiagonal(m,diagonal, c+1); } public static int[] getDiagonalInversa(int m[][],int diagonal[],int i){ if(i>=m.length){ return diagonal; } diagonal[i]=m[m.length-1-i][i]; return getDiagonalInversa(m,diagonal, i+1); } public static void main (String[] args) { int matriz[][]=cuadroMagico(9); Recursividad3.imprimirMatriz(matriz,0,0 ); System.out.println(""); for (int i = 0; i<matriz.length; i++){ System.out.println("la sumatoria de la fila ("+(i+1)+") "+vectorToString(matriz[i],0)+" es "+sumatoriaVector(matriz[i],0,0) ); } System.out.println(""); for (int i = 0; i<matriz.length; i++){ System.out.println("la sumatoria de la columna ("+(i+1)+") "+vectorToString(getColumna(matriz,new int[matriz.length],i,0),0)+" es "+sumatoriaVector(getColumna(matriz,new int[matriz.length],i,0),0,0) ); } System.out.println(""); System.out.println("la sumatoria de la diagonal principal "+vectorToString(getDiagonal(matriz,new int[matriz.length],0),0)+" es "+sumatoriaVector(getDiagonal(matriz,new int[matriz.length],0),0,0) ); System.out.println(""); System.out.println("la sumatoria de la diagonal inversa "+vectorToString(getDiagonalInversa(matriz,new int[matriz.length],0),0)+" es "+sumatoriaVector(getDiagonalInversa(matriz,new int[matriz.length],0),0,0) ); } }
la salida del programa es algo asi
| 47 | 58 | 69 | 80 | 1 | 12 | 23 | 34 | 45 | | 57 | 68 | 79 | 9 | 11 | 22 | 33 | 44 | 46 | | 67 | 78 | 8 | 10 | 21 | 32 | 43 | 54 | 56 | | 77 | 7 | 18 | 20 | 31 | 42 | 53 | 55 | 66 | | 6 | 17 | 19 | 30 | 41 | 52 | 63 | 65 | 76 | | 16 | 27 | 29 | 40 | 51 | 62 | 64 | 75 | 5 | | 26 | 28 | 39 | 50 | 61 | 72 | 74 | 4 | 15 | | 36 | 38 | 49 | 60 | 71 | 73 | 3 | 14 | 25 | | 37 | 48 | 59 | 70 | 81 | 2 | 13 | 24 | 35 | la sumatoria de la fila (1) | 47 | 58 | 69 | 80 | 1 | 12 | 23 | 34 | 45 | es 369 la sumatoria de la fila (2) | 57 | 68 | 79 | 9 | 11 | 22 | 33 | 44 | 46 | es 369 la sumatoria de la fila (3) | 67 | 78 | 8 | 10 | 21 | 32 | 43 | 54 | 56 | es 369 la sumatoria de la fila (4) | 77 | 7 | 18 | 20 | 31 | 42 | 53 | 55 | 66 | es 369 la sumatoria de la fila (5) | 6 | 17 | 19 | 30 | 41 | 52 | 63 | 65 | 76 | es 369 la sumatoria de la fila (6) | 16 | 27 | 29 | 40 | 51 | 62 | 64 | 75 | 5 | es 369 la sumatoria de la fila (7) | 26 | 28 | 39 | 50 | 61 | 72 | 74 | 4 | 15 | es 369 la sumatoria de la fila (8) | 36 | 38 | 49 | 60 | 71 | 73 | 3 | 14 | 25 | es 369 la sumatoria de la fila (9) | 37 | 48 | 59 | 70 | 81 | 2 | 13 | 24 | 35 | es 369 la sumatoria de la columna (1) | 47 | 57 | 67 | 77 | 6 | 16 | 26 | 36 | 37 | es 369 la sumatoria de la columna (2) | 58 | 68 | 78 | 7 | 17 | 27 | 28 | 38 | 48 | es 369 la sumatoria de la columna (3) | 69 | 79 | 8 | 18 | 19 | 29 | 39 | 49 | 59 | es 369 la sumatoria de la columna (4) | 80 | 9 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | es 369 la sumatoria de la columna (5) | 1 | 11 | 21 | 31 | 41 | 51 | 61 | 71 | 81 | es 369 la sumatoria de la columna (6) | 12 | 22 | 32 | 42 | 52 | 62 | 72 | 73 | 2 | es 369 la sumatoria de la columna (7) | 23 | 33 | 43 | 53 | 63 | 64 | 74 | 3 | 13 | es 369 la sumatoria de la columna (8) | 34 | 44 | 54 | 55 | 65 | 75 | 4 | 14 | 24 | es 369 la sumatoria de la columna (9) | 45 | 46 | 56 | 66 | 76 | 5 | 15 | 25 | 35 | es 369 la sumatoria de la diagonal principal | 47 | 68 | 8 | 20 | 41 | 62 | 74 | 14 | 35 | es 369 la sumatoria de la diagonal inversa | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | es 369
La clase Recursividad3 es necesaria para imprimir la matriz
Buenos Dias
Muchas gracias por el aporte esta muy bueno, pero solo queria pedir una cosita, es que para mostrar la matriz se necesita de la clase Recursividad3, asi que seria posible de que por favor nos regales ese pedazo de codigo.
Gracias de antemano
la clase ya esta montada en el blog buscala
quisiera un cuadrado magico de dos matrices y q imprimasolo los impares pero n se ingresa por teclado.. y q multiplique los dos cuadrados… fila y columna
¿quisiera un cuadrado mágico de dos matrices? no entendí bien ¿como hacemos que dos matrices sean un cuadro mágico?… que imprima solo los impares fácil y creo que ya esta en blog solo hay que recorrer la matriz y preguntar si el numero es impar o par (num%2==0) y el de multiplicar las 2 matrices también esta en el blog pues ya tienes toda la tarea hecho solo tienes que pegarla
estoy haciendo un juego de batalla naval de 10×10
y ya tengo el cuadrante pero, luego tengo el numero de barcos y los barcos si eligo 5,
que esos 5 ocupen 3 espacios del cuadrante es decir cada barco ocupara 3 espacios, pero no se como meterlos dentro del arreglo y luego que cuando ingrese el cuadrante donde esta se cambie por ejemplo si le doy al cuadrante qe se ponga 1, si no que se quede igual
Gloría, no entendí… pues tu entiendes todo lo que dijiste pero yo jamas en mi vida he jugado eso, pero yo lo que haría es:
tener una Class Barco;
Barco{
posicionx=0;
posiciony=0;
longitud=0;
nombre=0;
indice=0;
}
así posicionaría mis barcos sobre el tablero, relevaría la importancia de la matriz ya que esta solo tendría validez gráfica (solo al momento de la presentación).
guardaría mis barcos en un arreglo y así:
cuando el barco con indice = 2; cambie de posición asigno posicionx=?; y posiciony=?; y repinto mi tablero.
tendría que validar que la posición del barco y la longitud no se salgan del espacio asignado (pero ya no tendría que ver directamente con la lógica).
Gracias es exactamente lo que necesito, pero se requiere con interfaz grafico. como puedo imprimir las matrices en un jPanel o un jText ? Igualmente que se solicite al usuario la longitud del cuadro en la linea 088.
Sergio las consultas que estas realizando, sobre mostrar tanto la captura del tamaño, como la de visualizar el resultado por ventanas, es algo que no resulta complejo y ya tu lo has dicho:
* has una ventana donde tengas un par de entradas de texto y un botón.
* uno de los textos es para leer el tamaño de la matriz.
* el botón para ejecutar el proceso de calculo.
* la otra entrada de texto es para mostrar el resultado.
eso haría yo
hola oye muy bueno tu codigo me sirvio de mucho pero ala hora de correrlo me marca error en la parte de recursividad3 y ya me duele la cabeza de estar pensando donde esta el error
debes buscar la clase que se llama Recursividad3, está publica también en el blog
Recursividad3 … no me deja correr donde esta esa parte si me puedes ayudar
Oye por q con numeros pares no lo hace?
Las matrices cuadradas mágicas hoy en día tienen estrecha relación con el desarrollo de juegos de zudokus de varios niveles. A nivel computacional existe el algoritmo para la generación de zudokus a partir de la teoría de matrices cuadradas magicas.
Comparto el programa en python para determinar una matriz cuadrada mágica: https://tutorias.co/arrays-pythonmatriz-cuadrada-magica/