Run ID 作者 问题 语言 测评结果 Time Memory 代码长度 提交时间
141305 胡海峰老师 方阵填数 C++ Time Limit Exceeded 1000 MS 304 KB 1621 2025-12-22 10:31:36

Tests(0/3):


Code:

#include <iostream> using namespace std; int main() { int N; cin >> N; int matrix[101][101] = {0}; // 初始化:从右上角开始填1 int row = 0; // 当前行 int col = N - 1; // 当前列 int num = 1; // 当前数字 matrix[row][col] = num++; // 初始步长和方向 int step = N - 1; // 当前方向的移动步数 int dir = 0; // 0:下, 1:左, 2:上, 3:右 while (num <= N * N) { // 每个方向移动step步 for (int i = 0; i < step; i++) { // 根据方向移动 switch (dir) { case 0: row++; break; // 下 case 1: col--; break; // 左 case 2: row--; break; // 上 case 3: col++; break; // 右 } // 填充数字 matrix[row][col] = num++; // 如果已经填满,提前结束 if (num > N * N) break; } // 改变方向 dir = (dir + 1) % 4; // 关键:每两个方向后,步长减1 // 方向顺序:下(0) -> 左(1) -> 上(2) -> 右(3) // 在下(0)和上(2)之后需要减少步长 if (dir == 2 || dir == 0) { step--; } } // 输出结果 for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { cout << matrix[i][j]; if (j < N - 1) cout << " "; } cout << endl; } return 0; }