【发布时间】:2021-12-14 21:07:26
【问题描述】:
这是一个代码,旨在将一个矩阵乘以另一个矩阵,同时跳过任何不必要的乘法(其中一个乘数为 0 的乘法) 我需要为课程提交它,但我一直被告知 10 例中有 2 例没有通过,我在这里做错了什么?我的意思是我知道它看起来很糟糕,而且效率远非理想,但我已经到了我只想完成这个的地步。
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main ()
{
int anr, anc, bnr, bnc, i, j;
scanf("%d", &anr);
scanf("%d", &anc);
int a[anr][anc];
for (i=0; i<anr; i++)
{
for (j=0; j<anc; j++)
{
scanf("%d", &a[i][j]);
}
}
scanf("%d", &bnr);
scanf("%d", &bnc);
int b[bnr][bnc];
for (i=0; i<bnr; i++)
{
for (j=0; j<bnc; j++)
{
scanf("%d", &b[i][j]);
}
}
if (anc!=bnr)
{
return 0;
}
else
{
int k;
int out[anr][bnc];
for (i=0;i<anr;i++)
{
for (j=0;j<bnc;j++)
{
out[i][j]=0;
for (i=0;i<anr;i++)
{
for (j=0;j<bnc;j++)
{
out[i][j]=0;
for (k=0;k<bnr;k++)
{
if ((a[i][k]!=0) && (b[k][j]!=0))
{
out[i][j]=a[i][k]*b[k][j]+out[i][j];
}
}
}
}
}
}
for (i=0;i<anr;i++)
{
for (j=0;j<bnc;j++)
{
printf("%d ", out[i][j]);
}
printf("\n");
}
}
return 0;
}
【问题讨论】:
-
这是您的实际代码吗?您使用相同的 i/j 变量在两个循环中使用 i/j 变量启动两个循环?
-
不理解以上内容,我立即怀疑在两个不同的地方做
out[i][j]=0;。 -
看起来像一个非常困倦的学生的复制/粘贴错误。我的建议:休息一下:)
-
Welp,似乎代码正在运行,测试用例要求“无效”,以防矩阵的维度不适合乘法。谢谢大家的帮助。
标签: c sparse-matrix matrix-multiplication