提交时间:2026-01-19 20:39:56

运行 ID: 83028

#include <iostream> #include <iomanip> using namespace std; int main() { int N; cin >> N; // 创建N*N的二维数组,初始化为0 int matrix[N][N] = {0}; // 步骤1:填充最后一列(列索引N-1):1,2,...,N for (int i = 0; i < N; ++i) { matrix[i][N-1] = i + 1; } // 步骤2:填充最后一行(行索引N-1):N+1, N+2, ..., 2N-1 int num = N + 1; for (int j = N-2; j >= 0; --j) { matrix[N-1][j] = num++; } // 步骤3:分层填充剩余区域(螺旋向上、向右、向下) int top = 0; // 当前层的顶部行 int bottom = N - 2; // 当前层的底部行(最后一行已填充) int left = 0; // 当前层的左侧列 int right = N - 2; // 当前层的右侧列(最后一列已填充) while (top <= bottom && left <= right) { // 1. 向上填充左侧列(left):从bottom到top for (int i = bottom; i >= top; --i) { matrix[i][left] = num++; } left++; // 左侧列右移 if (left > right) break; // 边界交叉,退出 // 2. 向右填充顶部行(top):从left到right for (int j = left; j <= right; ++j) { matrix[top][j] = num++; } top++; // 顶部行下移 if (top > bottom) break; // 边界交叉,退出 // 3. 向下填充右侧列(right):从top到bottom for (int i = top; i <= bottom; ++i) { matrix[i][right] = num++; } right--; // 右侧列左移 } // 步骤4:输出矩阵,每个数字间用空格分隔 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; }