题解(有注释)
2023-07-16 14:04:43
发布于:广东
205阅读
0回复
0点赞
#include <iostream>
#include <vector>
using namespace std;
int main() {
    int N;
    cin >> N;
    vector<vector<int>> magicSquare(N, vector<int>(N, 0)); // 初始化一个N×N的幻方
    int row = 0; // 当前填数的行
    int col = N / 2; // 当前填数的列
    for (int num = 1; num <= N * N; num++) {
        magicSquare[row][col] = num; // 填写数字num
        int nextRow = (row - 1 + N) % N; // 计算下一个填数的行
        int nextCol = (col + 1) % N; // 计算下一个填数的列
        if (magicSquare[nextRow][nextCol] != 0) {
            // 如果下一个位置已经填过数字,则向下填数
            row = (row + 1) % N;
        } else {
            // 否则向右上方填数
            row = nextRow;
            col = nextCol;
        }
    }
    // 输出幻方
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            cout << magicSquare[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}
这里空空如也

有帮助,赞一个