Bailian3256 矩陣的乘法【數學計算】

3256:矩陣的乘法
總時間限制: 1000ms 內存限制: 65536kB
描述
矩陣int a[4][3],矩陣int b[3][5]。矩陣的數據由用戶輸入。輸出新的矩陣c=a*b. 輸出格式:
c00 c01 c02 c03 c04
c10 c11 c12 c13 c14
c20 c21 c22 c23 c24
c30 c31 c32 c33 c34

矩陣乘法的計算方法 :
對於矩陣A[m][q]*B[q][n],
相乘的結果爲矩陣C[m][n]且對於矩陣C中每一項都有
C[i][j] = A[i][0]*B[0][j] + A[i][1]*B[1][j] + … + A[i][q]*B[q][j]
輸入
第一行爲矩陣的大小,後面跟着輸入矩陣
x1,y1
a00 a01 a02
a10 a11 a12
a20 a21 a22
a30 a31 a32

x2,y2
b00 b01 b02 b03 b04
b10 b11 b12 b13 b14
b20 b21 b22 b23 b24
輸出
矩陣c
c00 c01 c02 c03 c04
c10 c11 c12 c13 c14
c20 c21 c22 c23 c24
c30 c31 c32 c33 c34
樣例輸入
4 3
1 2 3
4 5 6
7 8 9
10 11 12
3 5
7 8 9 10 11
4 5 6 7 8
1 2 3 4 5
樣例輸出
18 24 30 36 42
54 69 84 99 114
90 114 138 162 186
126 159 192 225 258
提示
輸出格式 cout << setw(5) << c[i][j];
來源
cs10107 C++ Final Exam

問題鏈接Bailian3256 矩陣的乘法
問題簡述:(略)
問題分析
    簡單的計算問題,不解釋。
    計算矩陣c時,是可以邊計算邊輸出的。
程序說明:(略)
參考鏈接:(略)
題記:程序中,把計算邏輯和輸入輸出邏輯分開,多數情況是合理的。這樣做也有可能造成代碼不夠簡潔。

AC的C++語言程序如下:

/* Bailian3256 矩陣的乘法 */

#include <iostream>
#include <iomanip>

using namespace std;

const int N = 100;
int a[N][N], b[N][N], c[N][N];

void print(int a[][N], int x, int y)
{
    for(int i = 0; i < y; i++) {
        for(int j = 0; j < x; j++)
            cout << setw(5) << a[j][i];
        cout << endl;
    }
}

int main()
{
    int x1, x2, y1, y2;

    cin >> x1 >> y1;
    for(int i = 0; i < x1; i++)
        for(int j = 0; j < y1; j++)
            cin >> a[i][j];
    cin >> x2 >> y2;
    for(int i = 0; i < x2; i++)
        for(int j = 0; j < y2; j++)
            cin >> b[i][j];

    for(int i = 0; i < x1; i++)
        for(int j = 0; j < y2; j++) {
            c[i][j] = 0;
            for(int k = 0; k < x2; k++)
                c[i][j] += a[i][k] * b[k][j];
        }

    for(int i = 0; i < x1; i++) {
        for(int j = 0; j < y2; j++)
            cout << setw(5) << c[i][j];
        cout << endl;
    }

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章