我的Magic Square算法出了点问题

时间:2014-12-10 16:20:36

标签: java magic-square

您好我在java中创建了一个Magic Square程序 如果您输入数字3但是如果我输入5,则它可以正常工作 发生了一个问题.. 模式出错了。

请帮我查一下我的代码中的错误:

这是我的代码:

    Scanner input = new Scanner(System.in);

    System.out.print("Enter a number: ");
    int num = input.nextInt();

    // Number must be ODD and not less than or equals to one to continue
    while ((num % 2 == 0) || (num <= 1)) {
        System.out.println("Enter a valid number: ");
        num = input.nextInt();
    }

    int[][] magic = new int[num][num];

    int row = 0;
    int col = num / 2;
    magic[row][col] = 1;

    for (int i = 2; i <= num * num; i++) {
        if (magic[(row + 5) % num][(col + 2) % num] == 0) {
            row = (row + 5) % num;
            col = (col + 2) % num;
        } else {
            row = (row + 1 + num) % num;
        }
        magic[row][col] = i;
    }

    for (int x = 0; x < num; x++) {
        for (int j = 0; j < num; j++) {
            System.out.print(magic[x][j] + "\t");
        }
        System.out.println();
    }

}

输入3时,它是正确的, 这是输出:

enter image description here

但是当我键入一个像5的数字时: 它变成了:

enter image description here

已更新!

1 个答案:

答案 0 :(得分:1)

您似乎正在尝试实施Method for constructing a magic square of odd order

  

该方法规定从第一行的中心列开始,编号为1.

你似乎有这个权利。

  

在此之后,填充方块的基本运动是对角向上和向右,一步一步。

我将其编码为:

int newRow = row - 1;
int newCol = col + 1;
  

当&#34;向上和向右&#34;移动将离开正方形,它分别缠绕到最后一行或第一列。

这显然是:

if ( newRow < 0 ) {
  newRow = num - 1;
}
if ( newCol > num - 1 ) {
  newCol = 0;
}
  

如果遇到填充的方块,则垂直向下移动一个方格,然后继续像以前一样。

if (magic[newRow][newCol] != 0) {
  newRow = row + 1;
  newCol = col;
}

我知道这并没有真正解决你的问题,但我希望它能帮助你实现目标。看看我如何采用算法的话,并尽可能准确地与代码匹配。