黎子卿 发表于 2023-11-27 21:19:50

为什么不对

#include <iostream>
#include <vector>

using namespace std;
int main()
{
        int n, m, k;
        cin >> n >> m >> k;
        vector<vector<int>> nums1;
        vector<vector<int>> nums2;
        int res;
        for (int i = 0; i < n; i++)
        {
                vector<int> num;
                for (int j = 0; j < m; j++)
                {
                        int number;
                        cin >> number;
                        num.push_back(number);
                }
                nums1.push_back(num);
        }
        for (int i = 0; i < m; i++)
        {
                vector<int> num;
                for (int j = 0; j < k; j++)
                {
                        int number;
                        cin >> number;
                        num.push_back(number);
                }
                nums2.push_back(num);
        }
        for (int i = 0; i < m; i++)
        {
               
                for (int j = 0; j < m; j++)
                {
                        int num1 = 0;
                        for (int s = 0; s < m; s++)
                        {
                                num1 = num1 + nums1 * nums2;
                        }
                        res = num1;
                }
        }
        for (int i = 0; i < m; i++)
        {
                for (int j = 0; j < m; j++)
                {
                        if (j != m - 1)
                        {
                                cout << res << " ";
                        }
                        else
                        {
                                cout << res << endl;
                        }
                }
        }
        return 0;
}这个求矩阵乘法的为什么不对

FishC_GPT 发表于 2023-11-27 21:20:14

这段代码有几个问题:

1. 在使用 vector 时没有指定元素的类型。需要在 `vector` 后面加上 `<int>`,表示使用整数类型。

2. 在计算 `num1` 的值时,错误地使用了 `nums1` 和 `nums2` 进行乘法操作。实际上,应该使用 `nums1 * nums2` 进行乘法运算。

3. 在输出结果时,缺少了具体要输出的内容。

修正后的代码如下:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    int n, m, k;
    cin >> n >> m >> k;
    vector<vector<int>> nums1;
    vector<vector<int>> nums2;
    vector<vector<int>> res(n, vector<int>(k, 0)); // 结果矩阵初始化为全零

    for (int i = 0; i < n; i++)
    {
      vector<int> num;
      for (int j = 0; j < m; j++)
      {
            int number;
            cin >> number;
            num.push_back(number);
      }
      nums1.push_back(num);
    }

    for (int i = 0; i < m; i++)
    {
      vector<int> num;
      for (int j = 0; j < k; j++)
      {
            int number;
            cin >> number;
            num.push_back(number);
      }
      nums2.push_back(num);
    }

    for (int i = 0; i < n; i++)
    {
      for (int j = 0; j < k; j++)
      {
            // 计算结果矩阵的每个元素
            for (int s = 0; s < m; s++)
            {
                res += nums1 * nums2;
            }
      }
    }

    // 输出结果矩阵
    for (int i = 0; i < n; i++)
    {
      for (int j = 0; j < k; j++)
      {
            if (j != k - 1)
            {
                cout << res << " ";
            }
            else
            {
                cout << res << endl;
            }
      }
    }

    return 0;
}

这样修改之后,可以正确读取输入数据并计算结果矩阵,最后输出结果。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

学习编程中的Ben 发表于 2023-11-27 21:20:55

FishC_GPT 发表于 2023-11-27 21:20
这段代码有几个问题:

1. 在使用 vector 时没有指定元素的类型。需要在 `vector` 后面加上 ``,表示使用整 ...

@不二如是 bug!建议修复

FishC_GPT 发表于 2023-11-27 21:21:17

学习编程中的Ben 发表于 2023-11-27 21:20
@不二如是 bug!建议修复

非常抱歉,我之前提供的代码有错误。下面是修复后的代码:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int n, m, k;
    cin >> n >> m >> k;

    vector<vector<int>> nums1(n, vector<int>(m, 0));
    vector<vector<int>> nums2(m, vector<int>(k, 0));
    vector<vector<int>> res(n, vector<int>(k, 0));

    // 输入 nums1 矩阵
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
            cin >> nums1;
      }
    }

    // 输入 nums2 矩阵
    for (int i = 0; i < m; i++) {
      for (int j = 0; j < k; j++) {
            cin >> nums2;
      }
    }

    // 计算矩阵乘法
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < k; j++) {
            for (int s = 0; s < m; s++) {
                res += nums1 * nums2;
            }
      }
    }

    // 输出结果矩阵
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < k; j++) {
            cout << res << " ";
      }
      cout << endl;
    }

    return 0;
}

这段代码修正了之前的错误,并将结果矩阵 `res` 初始化为全零。输入和输出部分也进行了修正,现在可以正常执行矩阵乘法和输出结果矩阵了。希望能对你有所帮助!如果还有问题,请随时提问。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

不二如是 发表于 2023-11-28 08:28:17

问题出现在第一个 for 循环中的第三个嵌套循环中的条件判断。

应该将 m 作为循环条件,而不是再次使用 n。

代码:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    int n, m, k;
    cin >> n >> m >> k;
    vector<vector<int>> nums1;
    vector<vector<int>> nums2;
    int res;
   
    for (int i = 0; i < n; i++)
    {
      vector<int> num;
      for (int j = 0; j < m; j++)
      {
            int number;
            cin >> number;
            num.push_back(number);
      }
      nums1.push_back(num);
    }
   
    for (int i = 0; i < m; i++)
    {
      vector<int> num;
      for (int j = 0; j < k; j++)
      {
            int number;
            cin >> number;
            num.push_back(number);
      }
      nums2.push_back(num);
    }
   
    for (int i = 0; i < n; i++)
    {
      for (int j = 0; j < k; j++)
      {
            int num1 = 0;
            for (int s = 0; s < m; s++)
            {
                num1 += nums1 * nums2;
            }
            res = num1;
      }
    }
   
    for (int i = 0; i < n; i++)
    {
      for (int j = 0; j < k; j++)
      {
            if (j != k - 1)
            {
                cout << res << " ";
            }
            else
            {
                cout << res << endl;
            }
      }
    }
   
    return 0;
}

小甲鱼 发表于 2023-11-28 14:58:54

学习编程中的Ben 发表于 2023-11-27 21:20
@不二如是 bug!建议修复

这个 BUG 有点难搞,跟 Discuz 的 BBCode 标签冲突了,解决的话可能要舍弃其中一个。
页: [1]
查看完整版本: 为什么不对