C++题解(DeepSeek版)
2025-04-16 20:02:25
发布于:四川
56阅读
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填充矩阵,然后输出结果矩阵。 
该方法确保编号按照题目要求的顺序进行填充,适用于给定的数据范围。
这里空空如也






有帮助,赞一个