题解(有注释)
2023-07-16 14:04:43
发布于:广东
133阅读
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;
}
这里空空如也
有帮助,赞一个