写一个n阶幻方的c语言程序
时间: 2024-05-01 20:21:43 浏览: 21
下面是一个简单的 C 语言程序,用于生成 n 阶幻方:
```c
#include <stdio.h>
#define MAX 15
int magic_square[MAX][MAX];
void generate_magic_square(int n) {
int i, j, num;
// 初始化幻方数组
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
magic_square[i][j] = 0;
}
}
// 计算幻方
i = 0;
j = n / 2;
for (num = 1; num <= n * n; num++) {
magic_square[i][j] = num;
i--;
j++;
if (num % n == 0) {
i += 2;
j--;
} else {
if (i < 0) {
i = n - 1;
}
if (j == n) {
j = 0;
}
}
}
}
void print_magic_square(int n) {
int i, j;
printf("Magic square of order %d:\n", n);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("%3d ", magic_square[i][j]);
}
printf("\n");
}
}
int main() {
int n;
printf("Enter the order of magic square (odd number only): ");
scanf("%d", &n);
if (n % 2 == 0) {
printf("Invalid order\n");
} else {
generate_magic_square(n);
print_magic_square(n);
}
return 0;
}
```
这个程序使用了一个算法来生成幻方。算法的基本思想是从幻方的中心开始,依次填入数字。如果下一个数字应该填在已经被占用的位置上,则将下一个数字填在当前数字的下面。如果下一个数字应该填在幻方的边界外,则将下一个数字填在当前数字的对面。这个算法保证了幻方的每一行、每一列和每一条对角线上的数字之和都相等。