Advertisement
Programer123

CuadroMagico

Nov 5th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.91 KB | None | 0 0
  1. import java.util.*;
  2. public class Cuadro{
  3.   int pivote; //La cantidad que debe sumar todas las filas y diagonales
  4.   int n; //dimension de la matriz nxn
  5.   int [][] matriz; //cuadro magico
  6.  
  7.   public static void main(String [] args){
  8.     new Cuadro().playGame();  
  9.   }
  10.   public void playGame(){
  11.       n = tamaniomatriz();//Definimos el tamanio del cuadro magico
  12.       matriz = pedirDatos(n);//Rellenamos la matriz
  13.       mostrarMatrizYSuma(matriz);
  14.       pivote = sumaFila(0); //Esto es arbitrario, puesto que todos deben sumar lo mismo
  15.       if (SumanColumnsIgual() &&  SumanFilasIgual() && SumanDiagonalsIgual() ){
  16.           System.out.println("Juego Terminado con Exito");
  17.       }else System.out.println("Error: No suman igual o ha repetido numeros -.-");
  18.   }
  19.   private int tamaniomatriz(){
  20.       System.out.print("Ingrese Tamaños de la matriz:\t");  
  21.       Scanner scan = new Scanner(System.in);
  22.       int rtn = scan.nextInt(); //Definimos el tamaño de la matriz nxn
  23.       return rtn;
  24.   }
  25.  
  26.   //@params n es la dimension de la matriz
  27.   private int[][] pedirDatos(int n){         
  28.       String line = new String();    
  29.       int [][] matrizcompleta = new int[n][n];
  30.      
  31.       Scanner scan = new Scanner(System.in);
  32.       scan = new Scanner(System.in);
  33.      
  34.      for (int i = 0; i<n; i++){
  35.           for (int j = 0; j<n; j++){
  36.             System.out.print("Ingrese valor" + "[" + i +"]"+"["+ j +"] :\t");
  37.             int valor = scan.nextInt(); //pedimos el dato
  38.             matrizcompleta[i][j]= valor;
  39.           }      
  40.       }
  41.       return matrizcompleta;
  42.   }
  43.    
  44.   private boolean SumanFilasIgual(){     
  45.       for (int k = 0; k<n; k++){
  46.           //todos debes sumar lo mismo que el pivote
  47.           //Si alguno suma menos es que ya no es magico
  48.           if (sumaFila(k)!=pivote){
  49.               return false;
  50.           }
  51.       }
  52.       return true;
  53.   }
  54.  
  55.   private boolean SumanColumnsIgual(){
  56.      
  57.       for (int k = 0; k<n; k++){
  58.           //todos debes sumar lo mismo que el pivote
  59.           //Si alguno suma menos es que ya no es magico
  60.           if (sumaColumna(k)!=pivote){
  61.               return false;
  62.           }
  63.       }
  64.       return true;
  65.   }
  66.  
  67.   private boolean SumanDiagonalsIgual(){
  68.       if (sumaDiagonalIzquierda()==pivote && sumaDiagonalDerecha()==pivote){
  69.           return true;       
  70.       }else { return false;}
  71.   }
  72.   //Metodos para operaciones del cuadro magico
  73.   private int sumaColumna(int i){
  74.     if(i>=0 & matriz!=null){
  75.       int suma = 0;
  76.       for (int j = 0; j<n; j++){
  77.         suma = matriz[j][i] + suma;
  78.       }
  79.       return suma;
  80.     }
  81.     return -1;
  82.   }
  83.  
  84.   private int sumaFila(int i){
  85.     if(i>=0 & matriz!=null){
  86.       int suma = 0;
  87.       for (int j = 0; j<n; j++){
  88.         suma = matriz[i][j] + suma;
  89.       }
  90.       return suma;
  91.     }
  92.     return -1;
  93.   }
  94.  
  95.   private int sumaDiagonalIzquierda(){
  96.       int sum = 0;
  97.     for (int i = 0; i<n; i++){
  98.         sum=sum + matriz[i][i];
  99.     }
  100.     return sum;
  101.   }
  102.  
  103.   private int sumaDiagonalDerecha(){
  104.       int sum = 0;
  105.     for (int i = 0; i<n; i++){
  106.         sum=sum + matriz[i][n-(i+1)];
  107.     }
  108.     return sum;
  109.   }  
  110.  
  111.    public void mostrarMatrizYSuma(int [][]a){
  112.        int l = matriz.length; //tamanio de la matriz
  113.         for(int i=0;i<l;i++){              
  114.             int sumafila=0;
  115.             for(int j=0;j<l;j++){          
  116.                 sumafila=sumafila+a[i][j];
  117.                 System.out.print(a[i][j] + "\t");
  118.             }
  119.             System.out.print("\t->"+sumafila);
  120.             System.out.println();
  121.         }        
  122.         //Opcional
  123.         for(int i=0;i<l;i++){
  124.             System.out.print("|\t");
  125.         }
  126.         System.out.println();
  127.         //hasta aqui
  128.        
  129.         int sumac=0;//guarda la suma de cada columna
  130.         for(int i=0;i<l;i++){                
  131.             sumac = 0;
  132.             for(int j=0;j<l;j++){
  133.                 /**Aqui unicamente hice voltee las variables en lugar de a[i][j], puse a[j][i], razonalo y veras que eso era todo
  134.                    era totalmente necesario hacerlo en dos ciclos*/
  135.                 sumac = sumac + a[j][i];
  136.             }
  137.             System.out.print(sumac + "\t");
  138.         }
  139.         System.out.println();
  140.     }
  141.    
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement