| Run ID | 作者 | 问题 | 语言 | 测评结果 | Time | Memory | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|
| 78467 | 彭士宝 | 数字方阵 | C++ | Wrong Answer | 1 MS | 268 KB | 2043 | 2024-06-22 09:53:39 |
#include <iostream> #include <vector> int main() { int n; std::cout << "Enter the value of n (2<=n<=9): "; std::cin >> n; if (n < 2 || n > 9) { std::cout << "n is out of the acceptable range." << std::endl; return 1; } // 创建一个n×n的向量 std::vector<std::vector<int>> matrix(n, std::vector<int>(n, 0)); int num = 1; // 当前要放置的数字 int layer = 0; // 当前层数 int direction = 0; // 当前方向:0右,1下,2左,3上 int steps[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; // 每个方向的步进 int start[2] = {0, 0}; // 当前层的起始位置 int end[2] = {n - 1, n - 1}; // 当前层的结束位置 while (layer < n / 2) { // 向右填充 for (int i = start[0]; i <= end[0]; ++i) { matrix[start[1]][i] = num++; } // 向下填充 for (int i = start[1] + 1; i <= end[1]; ++i) { matrix[i][end[0]] = num++; } if (layer % 2 == 0) { // 向左填充(顶层和底层) for (int i = end[0] - 1; i >= start[0]; --i) { matrix[end[1]][i] = num++; } } else { // 向左填充(中间层) for (int i = end[0] - 1; i > start[0]; --i) { matrix[start[1]][i] = num++; } } // 向上填充 for (int i = end[1] - 1; i > start[1]; --i) { matrix[i][start[0]] = num++; } // 更新层的位置 start[0]++; start[1]++; end[0]--; end[1]--; ++layer; } // 如果n是奇数,中间的数字已经填充,如果是偶数,需要填充中间的数字 if (n % 2 == 0) { matrix[n / 2][n / 2] = num; } // 打印矩阵 for (const auto& row : matrix) { for (int val : row) { std::cout << val << " "; } std::cout << std::endl; } return 0; }
------Input------
5
------Answer-----
1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1
------Your output-----
Enter the value of n (2<=n<=9): 1 2 3 4 5 16 17 22 19 6 15 23 0 20 7 14 0 0 21 8 13 12 11 10 9