九宫格,也叫三阶幻方,在一个3*3的矩阵中,填入1~9九个数字,使得其对角线、横行、纵向的和相等。 奇数阶的幻方有个简单的构造方法,可按照以下顺序依次递增填写数字:首先,以第一行中间位置作为初始位置,此后每次检查当前位置的右上角格子(行减一,列加一)的情况,如果右上角格子: 1、行越界,列正常;跳到当前列的最后一行,进行赋值; 2、行正常,列越界;跳到当前行的第一列,进行赋值; 3、行、列都正常时;又分为两种情况:1)该格中无值,则直接赋值;2)该格中有值,则回退到上一格的同列下方一格,进行赋值; 4、行、列都不正常时;则回退到上一格的同列下方一格,进行赋值。 请用Java程序实现,让用户输入一个奇数k,输出对应的k阶幻方。
时间: 2024-03-26 10:38:39 浏览: 165
以下是实现九宫格的Java程序,通过用户输入奇数k,生成k阶幻方:
```java
import java.util.Scanner;
public class MagicSquare {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入奇数k:");
int k = sc.nextInt();
if (k % 2 == 0) {
System.out.println("k必须是奇数!");
return;
}
int[][] square = new int[k][k];
int row = 0, col = k / 2; // 初始位置
for (int i = 1; i <= k * k; i++) {
square[row][col] = i;
row--;
col++;
if (row < 0 && col < k) { // 第1种情况
row = k - 1;
} else if (col == k && row >= 0) { // 第2种情况
col = 0;
} else if (row < 0 && col == k) { // 第3种情况
row = 1;
col = k - 1;
} else if (square[row][col] != 0) { // 第4种情况
row += 2;
col--;
}
}
// 输出幻方
System.out.println("生成的" + k + "阶幻方为:");
for (int i = 0; i < k; i++) {
for (int j = 0; j < k; j++) {
System.out.print(square[i][j] + "\t");
}
System.out.println();
}
}
}
```
示例输出:
```
请输入奇数k:5
生成的5阶幻方为:
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
```
阅读全文