Advertisement
Guest User

Untitled

a guest
Dec 9th, 2016
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.05 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.util.Arrays;
  4. import java.util.Scanner;
  5.  
  6. public class Main {
  7.  
  8.     public static void main(String[] args)
  9.     {
  10.         System.out.println("N eingeben:");
  11.         int n = new Scanner(System.in).nextInt();
  12.         int[][] feld = erzeugeMagischesQuadrat(n);
  13.         druckeMagischesQuadrat(feld);
  14.  
  15.         if (istMagischesQuadrat(feld))
  16.         {
  17.             System.out.println("Magisches Quadrat geprüft und in Ordnung...");
  18.         }
  19.  
  20.     }
  21.  
  22.  
  23.     public static void druckeMagischesQuadrat (int[][] quadrat)
  24.     {
  25.         for (int i = 0; i < quadrat.length; i++)
  26.         {
  27.             for (int j = 0; j < quadrat[i].length; j++)
  28.             {
  29.                 System.out.printf("%5d ", quadrat[i][j]);
  30.             }
  31.             System.out.println();
  32.         }
  33.     }
  34.  
  35.     public static int[][] erzeugeMagischesQuadrat (int n)
  36.     {
  37.         if (n%2 == 0) //check if n even
  38.         {
  39.             return new int[0][0];
  40.         }
  41.         if (n == 1) //dont calculate all
  42.         {
  43.             int[][] rtrn = {{1}};
  44.             return rtrn; //simply return 1
  45.         }
  46.         int[][] quadrat = new int[n][n];
  47.         int spalte = (n+1)/2;
  48.         int zeile = (n-1)/2;
  49.         for (int i = 1; i <= n*n; i++)
  50.         {
  51.             quadrat[zeile][spalte] = i;
  52.             spalte++;
  53.             zeile--;
  54.             if(zeile < 0)
  55.                 zeile = n-1;
  56.             if(spalte == n)
  57.                 spalte = 0;
  58.             if(quadrat[zeile][spalte] != 0)
  59.             {
  60.                 spalte++;
  61.                 zeile++;
  62.                 if(zeile == n)
  63.                     zeile = 0;
  64.                 if(spalte == n)
  65.                     spalte = 0;
  66.             }
  67.         }
  68.         return quadrat;
  69.     }
  70.  
  71.     public static boolean istMagischesQuadrat (int[][] quadrat)
  72.     {
  73.         if (quadrat.length == 0)
  74.         {
  75.             return false;
  76.         }
  77.         int n = quadrat.length; //get n
  78.         int masterSum = ((n*n*n)+n)/2; //sum for row, col and dia
  79.         int sumRow = 0; //counter for line
  80.         int[] sumCol = new int[n]; //counter for column
  81.         int[] sumDia = {0,0}; //counter for diagonal check
  82.  
  83.         for (int i = 0; i < n; i++) //one line
  84.         {
  85.             sumRow = 0; //reset line counter
  86.  
  87.             for (int j = 0; j < n; j++) //one value
  88.             {
  89.                 int value = quadrat[i][j];
  90.                 sumRow += value; //add line value
  91.                 sumCol[j] += value; //add column value
  92.                 if (j == i) //line = column
  93.                     sumDia[0] += value; //add dia value (left top -> right bottom)
  94.                 if (j == n-1-i)
  95.                     sumDia[1] += value; //add dia value (right top -> left bottom)
  96.             }
  97.             if (sumRow != masterSum) //not mastersum?
  98.                 return false;//quit
  99.         }
  100.         for (int item: sumCol) //check col values
  101.         {
  102.             if (item != masterSum)
  103.                 return false;
  104.         }
  105.         if (sumDia[0] != masterSum || sumDia[1] != masterSum) //check diagonal values
  106.             return false;
  107.         return true;
  108.     }
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement