鱼C论坛

 找回密码
 立即注册
查看: 1656|回复: 5

为什么不对

[复制链接]
发表于 2023-11-27 21:19:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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[105][105];
        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[i][s] * nums2[s][j];
                        }
                        res[i][j] = num1;
                }
        }
        for (int i = 0; i < m; i++)
        {
                for (int j = 0; j < m; j++)
                {
                        if (j != m - 1)
                        {
                                cout << res[i][j] << " ";
                        }
                        else
                        {
                                cout << res[i][j] << endl;
                        }
                }
        }
        return 0;
}这个求矩阵乘法的为什么不对
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-27 21:20:14 | 显示全部楼层
这段代码有几个问题:

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

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

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

修正后的代码如下:

  1. #include <iostream>
  2. #include <vector>

  3. using namespace std;

  4. int main()
  5. {
  6.     int n, m, k;
  7.     cin >> n >> m >> k;
  8.     vector<vector<int>> nums1;
  9.     vector<vector<int>> nums2;
  10.     vector<vector<int>> res(n, vector<int>(k, 0)); // 结果矩阵初始化为全零

  11.     for (int i = 0; i < n; i++)
  12.     {
  13.         vector<int> num;
  14.         for (int j = 0; j < m; j++)
  15.         {
  16.             int number;
  17.             cin >> number;
  18.             num.push_back(number);
  19.         }
  20.         nums1.push_back(num);
  21.     }

  22.     for (int i = 0; i < m; i++)
  23.     {
  24.         vector<int> num;
  25.         for (int j = 0; j < k; j++)
  26.         {
  27.             int number;
  28.             cin >> number;
  29.             num.push_back(number);
  30.         }
  31.         nums2.push_back(num);
  32.     }

  33.     for (int i = 0; i < n; i++)
  34.     {
  35.         for (int j = 0; j < k; j++)
  36.         {
  37.             // 计算结果矩阵的每个元素
  38.             for (int s = 0; s < m; s++)
  39.             {
  40.                 res[i][j] += nums1[i][s] * nums2[s][j];
  41.             }
  42.         }
  43.     }

  44.     // 输出结果矩阵
  45.     for (int i = 0; i < n; i++)
  46.     {
  47.         for (int j = 0; j < k; j++)
  48.         {
  49.             if (j != k - 1)
  50.             {
  51.                 cout << res[i][j] << " ";
  52.             }
  53.             else
  54.             {
  55.                 cout << res[i][j] << endl;
  56.             }
  57.         }
  58.     }

  59.     return 0;
  60. }
复制代码


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

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-27 21:20:55 | 显示全部楼层
FishC_GPT 发表于 2023-11-27 21:20
这段代码有几个问题:

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

@不二如是 bug!建议修复
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-27 21:21:17 | 显示全部楼层

非常抱歉,我之前提供的代码有错误。下面是修复后的代码:
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. int main() {
  5.     int n, m, k;
  6.     cin >> n >> m >> k;
  7.     vector<vector<int>> nums1(n, vector<int>(m, 0));
  8.     vector<vector<int>> nums2(m, vector<int>(k, 0));
  9.     vector<vector<int>> res(n, vector<int>(k, 0));
  10.     // 输入 nums1 矩阵
  11.     for (int i = 0; i < n; i++) {
  12.         for (int j = 0; j < m; j++) {
  13.             cin >> nums1[i][j];
  14.         }
  15.     }
  16.     // 输入 nums2 矩阵
  17.     for (int i = 0; i < m; i++) {
  18.         for (int j = 0; j < k; j++) {
  19.             cin >> nums2[i][j];
  20.         }
  21.     }
  22.     // 计算矩阵乘法
  23.     for (int i = 0; i < n; i++) {
  24.         for (int j = 0; j < k; j++) {
  25.             for (int s = 0; s < m; s++) {
  26.                 res[i][j] += nums1[i][s] * nums2[s][j];
  27.             }
  28.         }
  29.     }
  30.     // 输出结果矩阵
  31.     for (int i = 0; i < n; i++) {
  32.         for (int j = 0; j < k; j++) {
  33.             cout << res[i][j] << " ";
  34.         }
  35.         cout << endl;
  36.     }
  37.     return 0;
  38. }
复制代码

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

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-28 08:28:17 | 显示全部楼层
问题出现在第一个 for 循环中的第三个嵌套循环中的条件判断。

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

代码:

  1. #include <iostream>
  2. #include <vector>

  3. using namespace std;

  4. int main()
  5. {
  6.     int n, m, k;
  7.     cin >> n >> m >> k;
  8.     vector<vector<int>> nums1;
  9.     vector<vector<int>> nums2;
  10.     int res[105][105];
  11.    
  12.     for (int i = 0; i < n; i++)
  13.     {
  14.         vector<int> num;
  15.         for (int j = 0; j < m; j++)
  16.         {
  17.             int number;
  18.             cin >> number;
  19.             num.push_back(number);
  20.         }
  21.         nums1.push_back(num);
  22.     }
  23.    
  24.     for (int i = 0; i < m; i++)
  25.     {
  26.         vector<int> num;
  27.         for (int j = 0; j < k; j++)
  28.         {
  29.             int number;
  30.             cin >> number;
  31.             num.push_back(number);
  32.         }
  33.         nums2.push_back(num);
  34.     }
  35.    
  36.     for (int i = 0; i < n; i++)
  37.     {
  38.         for (int j = 0; j < k; j++)
  39.         {
  40.             int num1 = 0;
  41.             for (int s = 0; s < m; s++)
  42.             {
  43.                 num1 += nums1[i][s] * nums2[s][j];
  44.             }
  45.             res[i][j] = num1;
  46.         }
  47.     }
  48.    
  49.     for (int i = 0; i < n; i++)
  50.     {
  51.         for (int j = 0; j < k; j++)
  52.         {
  53.             if (j != k - 1)
  54.             {
  55.                 cout << res[i][j] << " ";
  56.             }
  57.             else
  58.             {
  59.                 cout << res[i][j] << endl;
  60.             }
  61.         }
  62.     }
  63.    
  64.     return 0;
  65. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-28 14:58:54 | 显示全部楼层

这个 BUG 有点难搞,跟 Discuz 的 BBCode 标签冲突了,解决的话可能要舍弃其中一个。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-19 23:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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