为什么不对
#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;
}这个求矩阵乘法的为什么不对 这段代码有几个问题:
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官方接口),如未能正确解答您的问题,请继续追问。 FishC_GPT 发表于 2023-11-27 21:20
这段代码有几个问题:
1. 在使用 vector 时没有指定元素的类型。需要在 `vector` 后面加上 ``,表示使用整 ...
@不二如是 bug!建议修复 学习编程中的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官方接口),如未能正确解答您的问题,请继续追问。 问题出现在第一个 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;
} 学习编程中的Ben 发表于 2023-11-27 21:20
@不二如是 bug!建议修复
这个 BUG 有点难搞,跟 Discuz 的 BBCode 标签冲突了,解决的话可能要舍弃其中一个。
页:
[1]