以下是一个用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;
}

该代码定义了两个函数 generateMagicSquareprintMagicSquare,分别用于生成N阶奇数幻方和打印幻方。在 main 函数中,首先要求用户输入幻方的大小(必须为奇数),然后调用 generateMagicSquare 生成幻方,并使用 printMagicSquare 打印幻方。

注意:在生成幻方时,采用了“Siamese Method”(斯亚姆方法)。算法从第一行中间的列开始,依次填充数字,并按照一定规则移动到相邻的位置。如果下一个位置已经被填充,则向上移动一行,向左移动两列。这个过程一直持续到所有位置都被填充完毕

用C++代码写一个N阶奇数幻方

原文地址: https://www.cveoy.top/t/topic/hSwD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录