如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C。这个矩阵的每个元素是由下面的公式决定的:
原型:
voidmatrix_multiply(int *m1,int *m2,int *r, int x, int y, int z);
输入参数:
int *m1:x行y列的矩阵(array1[x][y])
int *m2:y行z列的矩阵(array2[y][z])
int x:矩阵m1的行数
int y:矩阵m1的列数/矩阵m2的行数
int z:矩阵m2的列数
输出参数:
int *r:矩阵m1, m2相乘的结果(array3[x][z])
返回值:
void
输入说明:1、第一个矩阵的行数2、第一个矩阵的列数和第二个矩阵的行数3、第二个矩阵的列数4、第一个矩阵的值5、第二个矩阵的值
输出描述:
输出两个矩阵相乘的结果
输入例子:
2223 88 09 018 9输出例子:
171 7272 0基础题,两个矩阵相乘,严格根据定义,其实就是三重循环。从最内往外一层一层看,很容易理解:最内层就是一行乘以一列,得到的是矩阵C中的一个元素;倒数第二层就是一行乘以每一列,得到的是矩阵C中一行的结果;最外层就是每一行乘以每一列,得到即矩阵C的完整结果。写代码时可以按着这个思路从内层循环往外层写,非常清晰。需要注意的是最内层每计算出一个结果就是矩阵C中的一个元素,因此每次都需要清零sum。
int sum=0; for(int m=0;m<x;m++){ for(int n=0;n<z;n++){ for(int k=0;k<y;k++){ sum+=matrixA[m][k]*matrixB[k][n]; } matrixC[m][n]=sum; sum=0; } }完整AC的代码:#include <iostream>using namespace std;int main(){ int x,y,z; while(cin>>x>>y>>z){ int data; int matrixA[x][y],matrixB[y][z],matrixC[x][z]; for(int i=0;i<x;i++){ for(int j=0;j<y;j++){ cin>>data; matrixA[i][j]=data; } } for(int i=0;i<y;i++){ for(int j=0;j<z;j++){ cin>>data; matrixB[i][j]=data; } } int sum=0; for(int m=0;m<x;m++){ for(int n=0;n<z;n++){ for(int k=0;k<y;k++){ sum+=matrixA[m][k]*matrixB[k][n]; } matrixC[m][n]=sum; sum=0; } } for(int i=0;i<x;i++){ int j=0; for(;j<z-1;j++){ cout<<matrixC[i][j]<<" "; } cout<<matrixC[i][j]<<endl; } } return 0;}
新闻热点
疑难解答