满分详细题解
2024-11-17 22:37:36
发布于:广东
5阅读
0回复
0点赞
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N;
cin >> N;
vector<vector<int>> magicSquare(N, vector<int>(N, 0));
int num = 1;
int row = 0, col = N / 2;
while (num <= N * N) {
magicSquare[row][col] = num;
num++;
int newRow = (row - 1 + N) % N;
int newCol = (col + 1) % N;
if (magicSquare[newRow][newCol] != 0) {
newRow = (row + 1) % N;
newCol = col;
}
row = newRow;
col = newCol;
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (j > 0) cout << " ";
cout << magicSquare[i][j];
}
cout << endl;
}
return 0;
}
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N;
cin >> N; // 输入幻方的大小
vector<vector<int>> magicSquare(N, vector<int>(N, 0)); // 初始化 N x N 的空矩阵
int num = 1; // 从 1 开始填充
int row = 0, col = N / 2; // 初始位置为第一行的中间列
// 按照规则填充幻方
while (num <= N * N) {
magicSquare[row][col] = num; // 填充当前数字
num++; // 更新下一个数字
// 计算下一位置
int newRow = (row - 1 + N) % N; // 上一行,考虑环绕
int newCol = (col + 1) % N; // 下一列,考虑环绕
if (magicSquare[newRow][newCol] != 0) { // 如果新位置已经被占用
newRow = (row + 1) % N; // 否则下一个位置就放在当前数字的正下方
newCol = col; // 列不变
}
row = newRow;
col = newCol;
}
// 输出幻方
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (j > 0) cout << " "; // 控制数字间的空格
cout << magicSquare[i][j];
}
cout << endl; // 每行输出完毕后换行
}
return 0;
}
这里空空如也
有帮助,赞一个