题目要求
分析
注意题目说的是,幻方的N必定是奇数(实测确实不能是偶数),那就不需要检测了。
实际模拟,就是一个地图,按指定的要求移动就行。
这种题,看着吓人,但是其实严格按照说编写代码就行了,并不需要自己设计什么算法。
AC代码(Java语言描述)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
scanner.close();
int[][] array = new int[num][num];
int last_x = 0, last_y = num/2;
//肯定是奇数
array[0][last_y] = 1;
for (int i = 2; i <= num*num; i++) {
if (last_x == 0 && last_y != num-1) {
last_x = num-1;
++last_y;
} else if (last_x != 0 && last_y == num-1) {
--last_x;
last_y = 0;
} else if (last_x == 0 && last_y == num-1) {
++last_x;
} else if (array[last_x-1][last_y+1] == 0) {
--last_x;
++last_y;
} else {
++last_x;
}
array[last_x][last_y] = i;
}
StringBuilder result;
for (int i = 0; i < num; i++) {
result = new StringBuilder();
for (int j = 0; j < num; j++) {
result.append(array[i][j]).append(" ");
}
System.out.println(result.toString().trim());
}
}
}