思路:先随便放置1,下一个元素放在1的上一行,下一列,其实没必要非按照这个方法,可以是下一行下一列,都是一行一行的竖直加一或者减一
import java.util.Scanner;
public class n阶魔方阵 {
private static void Magic(int n) {
int mat[][] = new int[n][n];
int i = 0, j = n / 2; //将1放在第一行中间列
for (int k = 1; k <= n * n; k++) { //对n*n个空位置的魔方填入数据
mat[i][j] = k;
if (k % n == 0) { //下一位有数字,每三次产生一次下一位有数字
i = (i + 1) % n; //下一位在下一行
} else {
i = (i - 1 + n) % n; //在没到边界时,每次i减一,+n为了防止出现负数
j = (j + 1) % n; //每n个数换一列
}
}
for (i = 0; i < mat.length; i++) { //输出魔方阵
for (j = 0; j < mat[i].length; j++) {
System.out.print(mat[i][j] + "\t");
}
System.out.println();
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Magic(n);
}
}