C语言实现奇数阶幻方生成算法
C语言实现奇数阶幻方生成算法
本文介绍如何使用C语言实现奇数阶幻方的生成。
什么是幻方?
幻方是一个 n x n 的矩阵,其中填充了从 1 到 n^2 的整数,且每行、每列以及两条对角线上的数字之和都相等。
Glaisher 算法
Glaisher 算法是一种生成奇数阶幻方的算法。其步骤如下:
- 将数字 1 放置在第一行的中间列。
- 将后续数字依次放置在当前数字的右上方位置。
- 如果右上方位置已超出矩阵边界,则根据以下规则进行调整:
- 如果超出上边界,则放置到该列的最下方。
- 如果超出右边界,则放置到该行的最左侧。
- 如果右上方位置已有数字,则放置到当前数字的正下方。
C语言代码
#include <stdio.h>
#include <stdbool.h>
void generateMagicSquare(int n, int magicSquare[n][n]) {
int row = 0;
int col = n / 2;
for (int num = 1; num <= n * n; num++) {
magicSquare[row][col] = num;
row--;
col++;
if (num % n == 0) {
row += 2;
col--;
} else {
if (row < 0) {
row = n - 1;
}
if (col == n) {
col = 0;
}
}
}
}
void printMagicSquare(int n, int magicSquare[n][n]) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf('%4d', magicSquare[i][j]);
}
printf('
');
}
}
int main() {
int n;
printf('请输入一个奇数阶数(例如,3,5,7):');
scanf('%d', &n);
if (n % 2 != 1 || n < 3 || n > 19) {
printf('输入错误,请输入一个3到19之间的奇数。
');
return 1;
}
int magicSquare[n][n];
generateMagicSquare(n, magicSquare);
printMagicSquare(n, magicSquare);
return 0;
}
代码解释
generateMagicSquare函数根据 Glaisher 算法生成幻方。printMagicSquare函数打印生成的幻方。main函数处理用户输入,调用generateMagicSquare生成幻方,并调用printMagicSquare打印幻方。
示例
如果输入阶数为 5,则程序将输出以下 5x5 幻方:
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
总结
本文介绍了使用 Glaisher 算法生成奇数阶幻方的 C 语言实现。该算法简单易懂,代码简洁易读,适合初学者学习。
原文地址: https://www.cveoy.top/t/topic/UXL 著作权归作者所有。请勿转载和采集!