文章
1
粉丝
228
获赞
0
访问
12.5k
这里不好发图,我就用文字描述
可将结果分为几圈。例如:5可以分成3圈(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)(17 18 19 20 21 22 23 24)(25)
每一圈执行的操作是:下->右->上->左
注意! 最后输出的时候用“%-3d ” ,作占位符,最后还有个空格一个都不能错,不然不通过
这里就提供思路,本人已实现,代码拙劣就不贴了,有新思路的同学也欢迎与我交流
差不多代码是这样
#include <bits/stdc++.h> using namespace std; void generateSpiralMatrix(int n) { vector<vector<int>> matrix(n, vector<int>(n, 0)); int num = 1; int rowStart = 0, rowEnd = n - 1, colStart = 0, colEnd = n - 1; while (rowStart <= rowEnd && colStart <= colEnd) { // 向下填充 for (int i = rowStart; i <= rowEnd; i++) { matrix[i][colStart] = num++; } colStart++; // 向右填充 for (int i = colStart; i <= colEnd; i++) { matrix[rowEnd][i] = num++; } rowEnd--; // 向上填充 if (colStart <= colEnd) { for (int i = rowEnd; i >= rowStart; i--) { matrix[i][colEnd] = num++; } colEnd--; } // 向左填充 if (rowStart <= rowEnd) { for (int i = colEnd; i >= colStart; i--) { matrix[rowStart][i] = num++; } rowStart++; } } // 输出生成的螺旋矩阵 for (const auto &row : matrix) { for (int num : row) { cout << setw(3) << std::left << num << ' '; // 宽度为3,左对齐 } cout << '\n'; } } int main() { int n; cin >> n; generateSpiralMatrix(n); return 0; }
不贴代码,没必要发题解
登录后发布评论
差不多代码是这样
不贴代码,没必要发题解