Run ID:109193

提交时间:2025-02-06 11:55:19

#include <iostream> #include <vector> using namespace std; int main() { int N; cin >> N; vector<vector<int>> matrix(N, vector<int>(N, 0)); if (N == 0) { return 0; } int count = 0; // 用于记录当前填写的数字 for (int c = 1; c <= (N + 1) / 2; c++) { int row = c - 1; int col = N - c; int num = 0; // 每个圈的起始数字 if (c == 1) { num = N * N; } else { num = (c - 1) * 4 * (N - 2 * (c - 1) + 1) + 1; } // 当前圈的行和列的范围 int min_row = c - 1; int max_row = N - c; int min_col = c - 1; int max_col = N - c; // 填充当前圈 if (c % 2 == 0) { // 偶数层,顺时针填充 // 右 for (int i = min_row; i <= max_row; i++) { matrix[i][col] = num--; } // 下 for (int i = col - 1; i >= min_col; i--) { matrix[max_row][i] = num--; } // 左 for (int i = max_row - 1; i >= min_row; i--) { matrix[i][min_col] = num--; } // 上 for (int i = min_col + 1; i < col; i++) { matrix[min_row][i] = num--; } } else { // 奇数层,逆时针填充 // 左 for (int i = col; i >= min_col; i--) { matrix[row][i] = num--; } // 下 for (int i = row + 1; i <= max_row; i++) { matrix[i][min_col] = num--; } // 右 for (int i = min_col + 1; i <= col; i++) { matrix[max_row][i] = num--; } // 上 for (int i = max_row - 1; i > row; i--) { matrix[i][col] = num--; } } } // 输出结果矩阵 for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (j > 0) cout << " "; cout << matrix[i][j]; } cout << endl; } return 0; }