如果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;}
新聞熱點
疑難解答