C++题解(DeepSeek版)
2025-04-16 20:02:25
发布于:四川
26阅读
0回复
0点赞
要解决这个问题,我们需要按照特定的顺序为方阵中的每个位置编号。编号规则是外圈顺时针,内圈逆时针,交替进行,直到所有位置都被编号。
方法思路
- 初始化矩阵:创建一个大小为 的矩阵,用于存储编号。
- 分层处理:将方阵分为若干层,从外到内依次处理每一层。
- 交替方向编号:对于每一层,根据层数的奇偶性决定编号方向(顺时针或逆时针)。
- 填充编号:按照确定的顺序填充当前层的编号。
解决代码
#include <iostream>
#include <vector>
using namespace std;
void fillMatrix(vector<vector<int>>& matrix, int n) {
int current = 1;
for (int layer = 0; layer < (n + 1) / 2; ++layer) {
int start = layer;
int end = n - layer - 1;
if (layer % 2 == 0) {
// 顺时针方向
for (int i = start; i <= end; ++i) {
matrix[start][i] = current++;
}
for (int i = start + 1; i <= end; ++i) {
matrix[i][end] = current++;
}
for (int i = end - 1; i >= start; --i) {
matrix[end][i] = current++;
}
for (int i = end - 1; i > start; --i) {
matrix[i][start] = current++;
}
} else {
// 逆时针方向
for (int i = start; i <= end; ++i) {
matrix[i][start] = current++;
}
for (int i = start + 1; i <= end; ++i) {
matrix[end][i] = current++;
}
for (int i = end - 1; i >= start; --i) {
matrix[i][end] = current++;
}
for (int i = end - 1; i > start; --i) {
matrix[start][i] = current++;
}
}
}
}
int main() {
int n;
cin >> n;
vector<vector<int>> matrix(n, vector<int>(n));
fillMatrix(matrix, n);
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;
}
代码解释
fillMatrix
函数:负责填充矩阵的编号。current
:当前要填充的编号。layer
:当前处理的层数。start
和end
:当前层的起始和结束行列索引。- 顺时针方向:先填充上边,右边,下边,左边。
- 逆时针方向:先填充左边,下边,右边,上边。
- 主函数:读取输入,调用
fillMatrix
填充矩阵,然后输出结果矩阵。
该方法确保编号按照题目要求的顺序进行填充,适用于给定的数据范围。
这里空空如也
有帮助,赞一个