所谓“螺旋矩阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。
输入格式:
输入在一行中给出一个正整数N(<10)。
输出格式:
输出N×N的螺旋方阵。每行N个数字,每个数字占4位。
输入样例:
5
输出样例:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
完整代码
import java.util.Scanner; // 导入用于读取用户输入的 Scanner 类
public class Main { // 定义名为 Main 的公共类
public static void main(String[] args) { // 主函数
Scanner scanner = new Scanner(System.in); // 创建 Scanner 对象以读取用户输入
int N = scanner.nextInt(); // 从用户输入中读取整数 N
int[][] matrix = new int[N][N]; // 创建一个 N*N 的整数矩阵
int num = 1; // 从数字 1 开始填充
int top = 0, bottom = N - 1, left = 0, right = N - 1; // 初始化边界值
// 开始填充螺旋矩阵
while (num <= N * N) { // 当填充的数字不超过 N*N 时循环执行
// 从左到右填充上边界
for (int i = left; i <= right; i++) {
matrix[top][i] = num++; // 将 num 填充到当前位置,并递增 num
}
top++; // 上边界向下移动一行
// 从上到下填充右边界
for (int i = top; i <= bottom; i++) {
matrix[i][right] = num++; // 将 num 填充到当前位置,并递增 num
}
right--; // 右边界向左移动一列
// 从右到左填充下边界
for (int i = right; i >= left; i--) {
matrix[bottom][i] = num++; // 将 num 填充到当前位置,并递增 num
}
bottom--; // 下边界向上移动一行
// 从下到上填充左边界
for (int i = bottom; i >= top; i--) {
matrix[i][left] = num++; // 将 num 填充到当前位置,并递增 num
}
left++; // 左边界向右移动一列
}
// 打印生成的螺旋矩阵
for (int i = 0; i < N; i++) { // 遍历每一行
for (int j = 0; j < N; j++) { // 遍历每一列
System.out.printf("%4d", matrix[i][j]); // 格式化输出当前位置的数字
}
System.out.println(); // 打印换行符,开始下一行的输出
}
}
}