Problem Description

矩陣相乘最重要的方法當然是一般矩陣乘積了,它只有在第一個矩陣的列數  (column)和第二個矩陣的行數(row)相同時才有定義。一般單指矩陣乘積時,指的便是  一般矩陣乘積。若Am×n矩陣,Bn×p矩陣,則他們的乘積AB(有時記做A · B)會是  一個m×p矩陣。其乘積矩陣的元素如下面式子得出:

 

 以上是用矩陣單元的代數系統來說明這類乘法的抽象性質。


 由定義直接計算

左邊的圖表示出要如何計算AB的(1,2)和(3,3)元素,當A是個4×2矩陣和B是個2×3矩陣時。分別來自兩個矩陣的元素都依箭頭方向而兩兩配對,把每一對中的兩個元素相乘,再把這些乘積加總起來,最後得到的值即為箭頭相交位置的值。

 

 內容來源:維基百科

 http://zh.wikipedia.org/wiki/矩陣乘法
 

每組測資有 2 個矩陣,請把他們相乘之後的結果輸出

The Input

全部數字不會超過 2^31-1

兩矩陣大小不超過 100 * 100



每組測資第一行四個數字 a b c d

代表第一個矩陣有 a 列 b 行

  第二個矩陣有 c 列 d 行

接下來 a 行,每行 b 個數字

    c 行,每行 d 個數字

每個數字以空白隔開

不懂請參考範例輸入

The Output

輸出相乘之後的矩陣

每個數字以空白隔開

兩矩陣不能相乘請輸出 Error 再換下一組測資 ( 不用讀取矩陣 )

Sample Input

3     2     2     3
1     2
3     4
5     6
1     2     3
4     5     6
1     2     3     4

Sample Output

9     12     15
19     26     33
29     40     51
Error

-----* Problem from【ZeroJudge, an Online Judge System For Beginners

My Answer

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
  #include<iostream>
using namespace std;
int main(void)
{
  int a, b, c, d;
  while(cin>>a>>b>>c>>d){
    if(b!=c) cout<<"Error"<<endl;
    else{
      int A[a][b], B[c][d], C[a][d];
      for(int i=0; i<a; ++i)
        for(int j=0; j<b; ++j)
          cin>>A[i][j];
      for(int i=0; i<c; ++i)
        for(int j=0; j<d; ++j)
          cin>>B[i][j];

      for(int i=0; i<a; ++i){
        for(int j=0; j<d; ++j){
          C[i][j]=0;
          for(int k=0; k<c; ++k)
            C[i][j]+=A[i][k]*B[k][j];
          cout<<C[i][j]<<" ";
        }
        cout<<endl;
      }
    }
  }
  return 0;
}
 

 


arrow
arrow
    全站熱搜

    兔老大 發表在 痞客邦 留言(0) 人氣()