嘿伙计们,我正在尝试实现一种单独解决幻方的方法,但它似乎产生了错误的结果。
以下代码生成的结果
输入正方形大小: 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
谁能帮我解决它或告诉我哪里出了问题或我的问题出在哪里?
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);
}
}
任何帮助将不胜感激谢谢!