07
Mar
10

Llenar cuadro mágico en java


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


14 Respuestas to “Llenar cuadro mágico en java”


  1. 1 Anderson
    marzo 20, 2010 a las 10:55 pm

    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

  2. 3 Luis Cesar
    octubre 19, 2010 a las 4:52 pm

    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

    • octubre 20, 2010 a las 8:02 am

      ¿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

  3. 5 Gloria Perez
    noviembre 20, 2011 a las 7:46 pm

    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

    • noviembre 21, 2011 a las 8:44 am

      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).

  4. 7 Sergio
    abril 8, 2012 a las 2:17 pm

    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.

    • abril 9, 2012 a las 9:15 am

      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

  5. 9 nena
    junio 21, 2012 a las 1:55 pm

    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

  6. 11 rene
    junio 28, 2012 a las 7:56 pm

    Recursividad3 … no me deja correr donde esta esa parte si me puedes ayudar

  7. 13 Marko
    julio 19, 2012 a las 9:27 pm

    Oye por q con numeros pares no lo hace?

  8. febrero 25, 2020 a las 10:30 am

    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/


Deja un comentario


I+Ds

Dudas consultas
Facebook
Twiter
Google +

Escribe tu dirección de correo electrónico para suscribirte a este blog, y recibir notificaciones de nuevas publicaciones por correo.

Únete a otros 354 suscriptores

Redes Sociales y Archivos

Entradas

marzo 2010
L M X J V S D
1234567
891011121314
15161718192021
22232425262728
293031