**
蓝桥杯练习题—矩阵乘法
第一行输入m,s,n,转行后输入两个矩阵
要求结果输出矩阵的乘积
输入两个矩阵,分别是ms,sn大小。输出两个矩阵相乘的结果。
样例输入
2 3 2
1 0 -1
1 1 -3
0 3
1 2
3 1
样例输出
-3 2
-8 2
解题思路:构建三个动态数组,两个为输入的矩阵,第三个用于存储前两个矩阵的乘积并输出。
**
#include<iostream>
using namespace std;
int main()
{
int m, s, n;//输入;i按个矩阵的行列,其中a矩阵为m*s,b矩阵为s*n
cin >> m >> s >> n;
//构建动态二维数组a
int** a = new int* [m];
for (int i = 0; i < m; i++)
{
*(a + i) = new int[s];
for (int j = 0; j < s; j++)
cin >>a[i][j];//输入二维数组a的每个元素
}
//构建二维动态数组b
int **b = new int *[n];
for (int i = 0; i < s; i++)
{
*(b + i) = new int[n];
for (int j = 0; j < n; j++)
cin >> b[i][j];//输入二维数组b的每个元素
}
//构建动态二维数组c,c的每个元素c[i][j]即为a矩阵i行与b矩阵j列的乘积
int **c = new int *[m];
for (int i = 0; i < m; i++)
{
*(c + i) = new int[n];//初始化c的元素等于0
for (int j = 0; j < n; j++)
{
c[i][j] = 0;//i->m,j->n
int x = i, y = j;
for (int k = 0; k < s; k++)
c[i][j] += a[x][k] * b[k][y];//累加a数组x行元素与b数组y列的乘积得到数组c的元素
}
}
for (int i = 0; i < m; i++)
{for (int j = 0; j < n; j++)
cout << c[i][j] << " ";
cout << endl;//每行结束后转行
}
//撤销存储空间
delete[] * a;
delete[]a;
delete[] * b;
delete[]b;
delete[] * c;
delete[]c;
system("pause");//页面静止
return 0;
}