问题 A: 【例题1】矩阵A×B
时间限制: 1 Sec 内存限制: 128 MB
提交: 18 解决: 11
[提交][状态][讨论版][命题人:quanxing][Edit] [TestData]
题目链接:http://acm.ocrosoft.com/problem.php?cid=1704&pid=0
题目描述
矩阵A规模是n×m,矩阵B规模是m×p,现在需要你求A*B
输入
输入n,m。然后输入n×m的矩阵。
输入p,然后输入m×p的矩阵。
1<=n,m,p<=100
-10000<=矩阵元素<=10000
输出
输出相乘后的n×p的矩阵
样例输入
2 3
1 2 3
3 2 1
2
1 1
2 2
3 3
样例输出
14 14
10 10
思路:模拟矩阵乘法就行了
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct MUL
{
ll m[110][110];
}res;
MUL mul(MUL a, MUL b, int n, int m, int p, ll mod)//矩阵乘法,定义结构体函数,传入结构体,返回结构体,这样比较方便
{
MUL tmp;
for (int i = 1; i <= 100; i++)
{
for (int j = 1; j <= 100; j++)
{
tmp.m[i][j] = 0;
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= p; j++)
{
for (int k = 1; k <= m; k++)
{
tmp.m[i][j] = (tmp.m[i][j] + (a.m[i][k] % mod * b.m[k][j] % mod)) % mod;
}
}
}
return tmp;
}
int main()
{
int n, m;
cin >> n >> m;
MUL aa, bb;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cin >> aa.m[i][j];
}
}
int p;
cin >> p;
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= p; j++)
{
cin >> bb.m[i][j];
}
}
MUL result = mul(aa, bb, n, m, p, 10000000000);
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= p; j++)
{
cout << result.m[i][j] << " ";
}
cout << endl;
}
}