输出“魔方阵”。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均
相等。例如,三阶魔方阵为
8 1 6
3 5 7
4 9 2
要求输出1~n^2的自然数构成的魔方阵。
#include <stdio.h>
void generateMagicSquare(int n) {
int magicSquare[n][n];
// 初始化矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
magicSquare[i][j] = 0;
}
}
int num = 1;
int i = 0, j = n / 2;
while (num <= n * n) {
magicSquare[i][j] = num++;
int newi = (i - 1 + n) % n;
int newj = (j + 1) % n;
if (magicSquare[newi][newj] != 0) {
i = (i + 1) % n;
} else {
i = newi;
j = newj;
}
}
printf("%d阶魔方阵:\n", n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%3d ", magicSquare[i][j]);
}
printf("\n");
}
}
int main() {
int n;
printf("输入魔方阵的阶数:");
scanf("%d", &n);
if (n % 2 == 0) {
printf("阶数必须为奇数!\n");
} else {
generateMagicSquare(n);
}
return 0;
}
代码说明:
- 生成一个n阶(奇数)的魔方阵。
- 按照特定规则填充矩阵:从第一行中间开始,按对角线方向填充数字,如果位置已被占用,则向下移动。
- 最后输出生成的魔方阵。