鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 梦有所依丶

[已解决]c2676报错怎么解决,如下代码

[复制链接]
 楼主| 发表于 2024-4-15 19:35:54 | 显示全部楼层
#include <iostream>
#include <vector>
using namespace std;

vector<vector<int>> magicSquares; // 存储所有幻方的全局变量

// 判断当前矩阵是否为幻方
bool isMagicSquare(const vector<vector<int>>& square) {
    int sum = square[0][0] + square[0][1] + square[0][2] + square[0][3]; // 计算第一行的和
    
    // 检查每行的和
    for (int i = 1; i < 4; i++) {
        int rowSum = square[i][0] + square[i][1] + square[i][2] + square[i][3];
        if (rowSum != sum) {
            return false;
        }
    }
    
    // 检查每列的和
    for (int j = 0; j < 4; j++) {
        int colSum = square[0][j] + square[1][j] + square[2][j] + square[3][j];
        if (colSum != sum) {
            return false;
        }
    }
    
    // 检查对角线的和
    int diagSum1 = square[0][0] + square[1][1] + square[2][2] + square[3][3];
    int diagSum2 = square[0][3] + square[1][2] + square[2][1] + square[3][0];
    if (diagSum1 != sum || diagSum2 != sum) {
        return false;
    }
    
    return true;
}

// 输出矩阵
void printSquare(const vector<vector<int>>& square) {
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            cout << square[i][j] << " ";
        }
        cout << endl;
    }
}

// 生成所有可能的4x4幻方
void generateMagicSquares() {
    vector<int> nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
    
    do {
        vector<vector<int>> square;
        for (int i = 0; i < 4; i++) {
            vector<int> row;
            for (int j = 0; j < 4; j++) {
                row.push_back(nums[i * 4 + j]);
            }
            square.push_back(row);
        }
        
        if (isMagicSquare(square)) {
            magicSquares.push_back(square);
        }
    } while (next_permutation(nums.begin(), nums.end()));
}

int main() {
    generateMagicSquares();
    
    cout << "共有 " << magicSquares.size() << " 个4x4幻方:" << endl;
    for (const auto& square : magicSquares) {
        printSquare(square);
        cout << endl;
    }
    
    return 0;
}

里面magicSquares.push_back(square);报错c2665,printSquare(square);报错c2664,请修改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-15 19:36:20 | 显示全部楼层
梦有所依丶 发表于 2024-04-15 19:35
#include
#include
using namespace std;

vect ...


抱歉,代码中仍然存在错误。在两处计算和的地方使用了错误的运算符,应该使用数组下标操作来获取元素并累加。以下是修正后的代码:#include #include using namespace std;vector<vector<int>> magicSquares; // 存储所有幻方的全局变量// 判断当前矩阵是否为幻方bool isMagicSquare(const vector<vector<int>>& square) {    int sum = square[0][0] + square[0][1] + square[0][2] + square[0][3]; // 计算第一行的和    // 检查每行的和    for (int i = 1; i < 4; i++) {        int rowSum = square[i][0] + square[i][1] + square[i][2] + square[i][3];        if (rowSum != sum) {            return false;        }    }    // 检查每列的和    for (int j = 0; j < 4; j++) {        int colSum = square[0][j] + square[1][j] + square[2][j] + square[3][j];        if (colSum != sum) {            return false;        }    }    // 检查对角线的和    int diagSum1 = square[0][0] + square[1][1] + square[2][2] + square[3][3];    int diagSum2 = square[0][3] + square[1][2] + square[2][1] + square[3][0];    if (diagSum1 != sum || diagSum2 != sum) {        return false;    }    return true;}// 输出矩阵void printSquare(const vector<vector<int>>& square) {    for (int i = 0; i < 4; i++) {        for (int j = 0; j < 4; j++) {            cout << square[i][j] << " ";        }        cout << endl;    }}// 递归生成幻方void generateMagicSquare(vector<vector<int>>& square, int row, int col, vector<int>& used) {    if (row == 4) {        if (isMagicSquare(square)) {            magicSquares.push_back(square);        }        return;    }    if (col == 4) {        generateMagicSquare(square, row + 1, 0, used);        return;    }    for (int num = 1; num <= 16; num++) {        if (!used[num]) {            used[num] = 1;            square[row][col] = num;            generateMagicSquare(square, row, col + 1, used);            used[num] = 0;        }    }}int main() {    vector<vector<int>> square(4, vector<int>(4));    vector<int> used(17, 0);    generateMagicSquare(square, 0, 0, used);    cout << "共有 " << magicSquares.size() << " 个四阶幻方:" << endl;    for (const auto& s : magicSquares) {        printSquare(s);        cout << endl;    }    return 0;}

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-15 19:38:33 | 显示全部楼层
FishC 发表于 2024-4-15 19:25
以下是完整的代码:

62行和72行还是报错,请解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-15 19:38:56 | 显示全部楼层
梦有所依丶 发表于 2024-04-15 19:38
62行和72行还是报错,请解决


抱歉,我在之前的回答中没有正确解决这两行代码的问题。对于计算行和、列和和对角线和的逻辑,你需要使用正确的数组下标操作,而不是简单地重复相加同一个元素。

以下是修改后的代码:
#include <iostream>
#include <vector>
using namespace std;

vector<vector<int>> magicSquares; // 存储所有幻方的全局变量

// 判断当前矩阵是否为幻方
bool isMagicSquare(const vector<vector<int>>& square) {
    int sum = square[0][0] + square[0][1] + square[0][2] + square[0][3]; // 计算第一行的和

    // 检查每行的和
    for (int i = 1; i < 4; i++) {
        int rowSum = square[i][0] + square[i][1] + square[i][2] + square[i][3];
        if (rowSum != sum) {
            return false;
        }
    }

    // 检查每列的和
    for (int j = 0; j < 4; j++) {
        int colSum = square[0][j] + square[1][j] + square[2][j] + square[3][j];
        if (colSum != sum) {
            return false;
        }
    }

    // 检查对角线的和
    int diagSum1 = square[0][0] + square[1][1] + square[2][2] + square[3][3];
    int diagSum2 = square[0][3] + square[1][2] + square[2][1] + square[3][0];
    if (diagSum1 != sum || diagSum2 != sum) {
        return false;
    }

    return true;
}

// 输出矩阵
void printSquare(const vector<vector<int>>& square) {
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            cout << square[i][j] << " ";
        }
        cout << endl;
    }
}

int main() {
    // 生成幻方的所有可能性
    vector<int> nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
    do {
        vector<vector<int>> square = {
            { nums[0], nums[1], nums[2], nums[3] },
            { nums[4], nums[5], nums[6], nums[7] },
            { nums[8], nums[9], nums[10], nums[11] },
            { nums[12], nums[13], nums[14], nums[15] }
        };
        if (isMagicSquare(square)) {
            magicSquares.push_back(square);
        }
    } while (next_permutation(nums.begin(), nums.end()));

    // 输出所有符合条件的幻方
    for (int i = 0; i < magicSquares.size(); i++) {
        cout << "Magic Square #" << i + 1 << ":" << endl;
        printSquare(magicSquares[i]);
        cout << endl;
    }

    return 0;
}

这个程序使用了`next_permutation`函数来生成所有的幻方可能性,并判断它们是否为幻方。然后通过`printSquare`函数输出所有符合条件的幻方。请注意,在输出幻方时,我添加了一些格式化的空行,以提高可读性。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 01:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表