Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.util.Arrays;
- import java.util.Scanner;
- public class Main {
- public static void main(String[] args)
- {
- System.out.println("N eingeben:");
- int n = new Scanner(System.in).nextInt();
- int[][] feld = erzeugeMagischesQuadrat(n);
- druckeMagischesQuadrat(feld);
- if (istMagischesQuadrat(feld))
- {
- System.out.println("Magisches Quadrat geprüft und in Ordnung...");
- }
- }
- public static void druckeMagischesQuadrat (int[][] quadrat)
- {
- for (int i = 0; i < quadrat.length; i++)
- {
- for (int j = 0; j < quadrat[i].length; j++)
- {
- System.out.printf("%5d ", quadrat[i][j]);
- }
- System.out.println();
- }
- }
- public static int[][] erzeugeMagischesQuadrat (int n)
- {
- if (n%2 == 0) //check if n even
- {
- return new int[0][0];
- }
- if (n == 1) //dont calculate all
- {
- int[][] rtrn = {{1}};
- return rtrn; //simply return 1
- }
- int[][] quadrat = new int[n][n];
- int spalte = (n+1)/2;
- int zeile = (n-1)/2;
- for (int i = 1; i <= n*n; i++)
- {
- quadrat[zeile][spalte] = i;
- spalte++;
- zeile--;
- if(zeile < 0)
- zeile = n-1;
- if(spalte == n)
- spalte = 0;
- if(quadrat[zeile][spalte] != 0)
- {
- spalte++;
- zeile++;
- if(zeile == n)
- zeile = 0;
- if(spalte == n)
- spalte = 0;
- }
- }
- return quadrat;
- }
- public static boolean istMagischesQuadrat (int[][] quadrat)
- {
- if (quadrat.length == 0)
- {
- return false;
- }
- int n = quadrat.length; //get n
- int masterSum = ((n*n*n)+n)/2; //sum for row, col and dia
- int sumRow = 0; //counter for line
- int[] sumCol = new int[n]; //counter for column
- int[] sumDia = {0,0}; //counter for diagonal check
- for (int i = 0; i < n; i++) //one line
- {
- sumRow = 0; //reset line counter
- for (int j = 0; j < n; j++) //one value
- {
- int value = quadrat[i][j];
- sumRow += value; //add line value
- sumCol[j] += value; //add column value
- if (j == i) //line = column
- sumDia[0] += value; //add dia value (left top -> right bottom)
- if (j == n-1-i)
- sumDia[1] += value; //add dia value (right top -> left bottom)
- }
- if (sumRow != masterSum) //not mastersum?
- return false;//quit
- }
- for (int item: sumCol) //check col values
- {
- if (item != masterSum)
- return false;
- }
- if (sumDia[0] != masterSum || sumDia[1] != masterSum) //check diagonal values
- return false;
- return true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement