描述
給定兩個矩陣 A (n*t) 和 B(t*m) ,請計算出C = A*B
-
輸入
-
第一行包含一個整數T,表示有T組測試資料。
以下每組測試資料格式:
第一行為3個正整數 N T M 分別表示矩陣A的N*T和矩陣B的T*M,均小於等於100.
接下來的N行,每行T個整數,描述矩陣A;
接下來得T行,每行M個整數,描述矩陣B。
每個數字範圍為[-100,100]。
-
輸出
-
輸出N*M行矩陣C
經典的問題,按照線性代數上面的步驟做即可
#include<stdio.h>#include <stdlib.h>// b[j][k] * c[k][i] = a[j][i]void matrix(int **b,int **c, int **a, int nx, int ny, int nk){int i,j,k;for (j=0;j<ny;j++)for(i=0;i<nx;i++)a[j][i]= 0;for(j=0;j<ny;j++){for(i=0;i<nx;i++){for(k=0;k<nk;k++)a[j][i]+= b[j][k]*c[k][i];};};}void main(){int i,j,k,tmp;int b_row,b_col;int c_row,c_col;int a_row,a_col;int **b,**c,**a;int number,te;int n,t,m;scanf("%d",&number);for(te=1;te<=number;te++){ scanf("%d %d %d",&n,&t,&m);// 輸入B 陣 行數 列數 b_row=n; b_col=t; c_row=t; c_col=m;// 輸入C陣 列數a_row = b_row;a_col = c_col;a = (int **) malloc(sizeof(int *) * a_row);for (j=0;j<a_row;j++){a[j] = (int *) malloc(sizeof(int) * a_col);}b = (int **) malloc(sizeof(int *) * b_row);for (j=0;j<b_row;j++){b[j] = (int *) malloc(sizeof(int) * b_col);}c = (int **) malloc(sizeof(int *) * c_row);for (j=0;j<c_row;j++){c[j] = (int *) malloc(sizeof(int) * c_col);}// 輸入B陣元素for (j=0;j<b_row;j++)for (i=0;i<b_col;i++){scanf("%d",&tmp);b[j][i] = tmp;}// 輸入C陣元素for (j=0;j<c_row;j++)for (i=0;i<c_col;i++){scanf("%d",&tmp);c[j][i] = tmp;}matrix( b ,c,a, a_col, a_row, b_col);for(j=0;j<a_row;j++){for (i=0;i<a_col;i++) printf("%d ",a[j][i]);printf("\n");}}}