Эй, ребята, я пытаюсь реализовать метод для решения даже одного магического квадрата, но, похоже, он дает неправильные результаты.
Результат, сгенерированный следующим кодом
Введите размер квадрата: 10
75 75 0 0 0 50 50 50 50 25
75 75 0 0 0 50 50 50 50 25
0 75 75 0 0 50 50 50 50 25
75 75 0 0 0 50 50 50 50 25
75 75 0 0 0 50 50 50 50 25
0 0 75 75 75 25 25 25 25 50
0 0 75 75 75 25 25 25 25 50
75 0 0 75 75 25 25 25 25 50
0 0 75 75 75 25 25 25 25 50
0 0 75 75 75 25 25 25 25 50
Магическая константа 375
Метод LUX Конвея для магических квадратов
Может кто-нибудь помочь мне исправить это или сообщить мне очто не так или где мои проблемы лежат?
import java.util.Scanner;
public class MagicSquare {
private static int[][] magicSquare; //initialization
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int size = -1;
System.out.println("Enter in size of square: ");
size = input.nextInt();
magicSquare = new int [size][size];
singlyEvenMagicSquare(size);
displaySquare();
}
public static void singlyEvenMagicSquare(int size)
{
int i, j, k, index=0;
int p=size/2;
int [][] M = new int [p][p];
//magicSquare = new int[size][size];
for (i=0; i<p; i++)
for (j=0; j<p; j++)
{
magicSquare[i][j]=M[i][j];
magicSquare[i+p][j]=M[i][j]+3*p*p;
magicSquare[i][j+p]=M[i][j]+2*p*p;
magicSquare[i+p][j+p]=M[i][j]+p*p;
}
if (size==2)
return;
int [] I = new int[p];
int [] J = new int[size];
for (i=0; i<p; i++)
I[i]=i+1;
k=(size-2)/4;
for (i=1; i<=k; i++)
J[index++] = i;
for (i=size-k+2; i<=size; i++)
J[index++] = i;
int temp;
for (i=1; i<=p; i++)
for (j=1; j<=index; j++)
{
temp=magicSquare[i-1][J[j-1]-1];
magicSquare[i-1][J[j-1]-1]=magicSquare[i+p-1][J[j-1]-1];
magicSquare[i+p-1][J[j-1]-1]=temp;
}
//j=1, i
//i=k+1, k+1+p
i=k;
j=0;
temp=magicSquare[i][j];
magicSquare[i][j]=magicSquare[i+p][j];
magicSquare[i+p][j]=temp;
j=i;
temp=magicSquare[i+p][j];
magicSquare[i+p][j]=magicSquare[i][j];
magicSquare[i][j]=temp;
}
private static void displaySquare() {
int magicConstant = 0;
for (int j = 0; j < magicSquare.length; j++) {
for (int k = 0; k < magicSquare[j].length; k++) {
System.out.print(magicSquare[j][k] + " ");
}
System.out.print("\n");
magicConstant = magicConstant + magicSquare[j][0];
}
System.out.print("The magic constant is " + magicConstant);
}
}
Любая помощь будет оценена спасибо!