代码注释#include <iostream> #include <iomanip> using namespace std; int main() { const int N = 5; int a[N][N] = {0}; int x=0, y=N/2; a[x][y] = 1; for(int num=2; num<=N*N; num++) { int nx = (x+N-1)%N, ny = (y+1)%N; if ((x==0 && y==N-1) || a[nx][ny] > 0) { nx = (x+1)%N; ny = y; } a[nx][ny] = num; x = nx; y = ny; } for(int i=0; i<N; i++) { for(int j=0; j<N; j++) cout <<setw(2)<< a[i][j] << " "; cout << endl; } return 0; }
时间: 2024-03-04 15:50:57 浏览: 23
#include <iostream> // C++标准输入输出流库
#include <iomanip> // C++格式化输出库
using namespace std; // 命名空间
int main() {
const int N = 5; // 魔方阵的阶数
int a[N][N] = {0}; // 初始化二维数组a,所有元素初始化为0
int x=0, y=N/2; // 初始化填充位置的坐标,将填充位置设为第一行中间列
a[x][y] = 1; // 将第一个数1填充到二维数组的第一行中间列中
// 循环填充魔方阵
for(int num=2; num<=N*N; num++) {
int nx = (x+N-1)%N, ny = (y+1)%N; // 计算下一个填充位置的坐标
// 判断下一个填充位置是否已经被填充过或者位于右上角
if ((x==0 && y==N-1) || a[nx][ny] > 0) {
nx = (x+1)%N; // 如果是,则将当前位置下移一行
ny = y;
}
a[nx][ny] = num; // 将下一个数填充到二维数组中
x = nx; // 更新当前填充位置的坐标
y = ny;
}
// 循环输出二维数组中的数值,以得到完整的魔方阵
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++)
cout <<setw(2)<< a[i][j] << " "; // 格式化输出,每个数占2个字符宽度
cout << endl;
}
return 0; // 程序结束,返回0表示执行成功
}