用C++代码写一个N阶奇数幻方
以下是一个用C++编写的N阶奇数幻方的代码示例:
#include <iostream>
#include <vector>
std::vector<std::vector<int>> generateMagicSquare(int n) {
std::vector<std::vector<int>> magicSquare(n, std::vector<int>(n, 0));
int row = n - 1;
int col = n / 2;
for (int num = 1; num <= n * n; num++) {
magicSquare[row][col] = num;
row = (row + 1) % n;
col = (col + 1) % n;
if (magicSquare[row][col] != 0) {
row = (row - 1 + n) % n;
col = (col - 2 + n) % n;
}
}
return magicSquare;
}
void printMagicSquare(const std::vector<std::vector<int>>& magicSquare) {
for (const auto& row : magicSquare) {
for (int num : row) {
std::cout << num << "\t";
}
std::cout << std::endl;
}
}
int main() {
int n;
std::cout << "Enter the size of magic square (odd number): ";
std::cin >> n;
if (n % 2 == 0) {
std::cout << "Invalid input. Size must be odd." << std::endl;
return 0;
}
std::vector<std::vector<int>> magicSquare = generateMagicSquare(n);
std::cout << "Magic Square:" << std::endl;
printMagicSquare(magicSquare);
return 0;
}
该代码定义了两个函数 generateMagicSquare 和 printMagicSquare,分别用于生成N阶奇数幻方和打印幻方。在 main 函数中,首先要求用户输入幻方的大小(必须为奇数),然后调用 generateMagicSquare 生成幻方,并使用 printMagicSquare 打印幻方。
注意:在生成幻方时,采用了“Siamese Method”(斯亚姆方法)。算法从第一行中间的列开始,依次填充数字,并按照一定规则移动到相邻的位置。如果下一个位置已经被填充,则向上移动一行,向左移动两列。这个过程一直持续到所有位置都被填充完毕
原文地址: https://www.cveoy.top/t/topic/hSwD 著作权归作者所有。请勿转载和采集!