华为OJ——矩阵乘法

来源:互联网 发布:淘宝日本代购店推荐 编辑:程序博客网 时间:2024/06/10 22:37

矩阵乘法

题目描述

如果A是个xy列的矩阵,B是个yz列的矩阵,把AB相乘,其结果将是另一个xz列的矩阵C。这个矩阵的每个元素是由下面的公式决定的:

原型:

voidmatrix_multiply(int *m1,int *m2,int *r, int x, int y, int z);

输入参数:

    int *m1xy列的矩阵(array1[x][y])

    int *m2yz列的矩阵(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、第二个矩阵的值

输出描述:

输出两个矩阵相乘的结果

输入例子:

2

2

2

3 8

8 0

9 0

18 9

 

输出例子:

171 72

72 0

解答代码:

#include<iostream>

#include<string>

#include<cstring>

#include<cstdio>

#include<algorithm>

#include<fstream>

#define N 200

using namespace std;

 

int main()

{

//freopen("1.txt","r",stdin);

int row1,col1;//第一个矩阵的行和列

int row2,col2;//第二个矩阵的行和列

int array1[N][N];

int array2[N][N];

int array3[N][N];

int i,j,k;

while(cin>>row1>>col1>>col2)

{

row2=col1;

//输入第一个矩阵的值

for(i=0;i<row1;i++)

for(j=0;j<col1;j++)

cin>>array1[i][j];

//输入第二个矩阵的值

for(i=0;i<row2;i++)

for(j=0;j<col2;j++)

cin>>array2[i][j];

    //矩阵乘法运算

 

    for(i=0;i<row1;i++)

{

for(j=0;j<col2;j++)

{

array3[i][j]=0;

for(k=0;k<col1;k++)

array3[i][j]=array3[i][j]+array1[i][k]*array2[k][j];

cout<<array3[i][j];

if(j==col2-1)

cout<<endl;

else

cout<<' ';

}

}

}

 

return 0;

}

 


0 0