10223矩阵乘法【2.19】---解题报告_无知的我_百度空间

描述

给 定两个矩阵 A (n*t) B(t*m) ,请计算出C = A*B

输入

第 一行包含一个整数T,表示有T组测试数据。

以 下每组测试数据格式:

第 一行为3个正整数 N T M 分别表示矩阵AN*T和矩阵BT*M,均小于等于100.

接 下来的N行,每行T个整数,描述矩阵A

接 下来得T行,每行M个整数,描述矩阵B                                  

每 个数字范围为[-100,100]

输出

输 出N*M行矩阵C

样例输入

样例输出

10 13
22 29

解题思路:
相信学过线性代数的人都知道矩阵乘法是怎么回事,行和列是如何交叉相乘的都很清楚。这里通过程序来模拟,可以用三个二维数组来模拟,通过循环相乘来进行计算即可。

#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");
}
}
}


郑重声明:资讯 【10223矩阵乘法【2.19】---解题报告_无知的我_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——