public static void main(String[] args) {
//用阶梯法写奇数幻方
// 首先创建一个奇数阶二维数组
System.out.println("请输入幻方的阶数:");
int n = new Scanner(System.in).nextInt();
int[][] sq = new int[n][n];
//确定起始坐标
int x = 0;
int y = n / 2;
for (int i = 1; i <= n * n; i++) {
// 确定1在第一行的中间
sq[x][y] = i;
//下一个点在这个点的右上角,如果下一点不在矩阵内,则在右上角的对立面
int m = (x - 1 + n) % n;
int k = (y + 1) % n;
//如果下一个点的位置已经有数,则将下一个点放在这个点的下方
if(sq[m][k] > 0){
x = (x + 1)% n;
}else{
x = m;
y = k;
}
}
for (int[] a : sq) {
for (int b : a) {
System.out.print(b + "\t");
}
System.out.println();
}
}
}
测试结果:
(1)请输入幻方的阶数:
3
8 1 6
3 5 7
4 9 2
(2)请输入幻方的阶数:
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
基本符合预想的结果