这道题是矩阵乘法的裸题,但是我这个蒟蒻还是花了几乎一晚上才A。一开始我定义了(ai * aj)(bi * bj)的矩阵,绕着绕着就绕晕了。
之后问了ilern(ilern的链接),定义了(m * p)(p * n)的矩阵,第一层循环m,第二层循环n,第三层循环p,答案矩阵是(m * n)的,很容易就写出来了 。
#include <cstdio>
const int maxn = 205;
int a[maxn][maxn], b[maxn][maxn];
long long c[maxn][maxn];
int main()
{
int n, m, p;
scanf("%d %d", &m, &p);
for (int i = 0; i < m; i++)
{
for (int j = 0; j < p; j++)
{
scanf("%d", &a[i][j]);
}
}
scanf("%d %d", &p, &n);
for (int i = 0; i < p; i++)
{
for (int j = 0; j < n; j++)
{
scanf("%d", &b[i][j]);
}
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
for (int k = 0; k < p; k++)
{
c[i][j] += a[i][k] * b[k][j];
}
}
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
printf("%lld ", c[i][j]);
}
printf("\n");
}
return 0;
}
另外矩阵乘法的定义矩阵A的第一行乘矩阵B的第一列,得到矩阵C的第一行第一个数,接着A的第一行乘B的第二列,得C的第一行第二个数。一开始我连定义都没搞明白就开始写题,以为自己怪能。