gpt4 book ai didi

java - 求解单偶幻方 (Lux)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:50:42 24 4
gpt4 key购买 nike

大家好,我正在尝试实现一种求解单偶幻方的方法,但它似乎产生了错误的结果。

以下代码生成的结果

输入正方形的大小: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

Conway's LUX method for magic squares

任何人都可以帮助我修复它或告诉我哪里出了问题或我的问题出在哪里吗?

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);
}

}

如有任何帮助,我们将不胜感激!

最佳答案

public class MagicSquare {

private static int[][] magicSquare;
private static int size;

public static void main(String[] args) {

size = readValueFromFile();

boolean validNum = false;

if (size<3) {
System.err.println("Enter a positive integer square size of 3 or more");
validNum = false;
} else {
validNum = true;
}

if(validNum){
magicSquare = new int [size][size];
MagicSq(magicSquare,size);
displaySquare();

}
}

/**
* The following function determines which magic square operation to perform given the order(n)
* @param magicSquare
* @param size
*/
public static void MagicSq(int[][] magicSquare,int size) {
if(size%2==1)
OddMagicSquare(magicSquare,size);
else if (size%4==0)
DoubleEvenMagicSquare(magicSquare,size);
else
SinglyEvenMagicSquare(magicSquare,size);

}

public static void SinglyEvenMagicSquare(int[][] magicSquare,int size) {
int i, j, k, index=0;

int p=size/2;

int [][] M = new int [p][p];

MagicSq(M,p);

System.out.println();

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;
}

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;
}

//truncated for clarity
}

关于java - 求解单偶幻方 (Lux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5573842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com