蓝桥杯 算法训练 矩阵乘法(c语言版详细注释)

试题 算法训练 矩阵乘法

                                                                                  蓝桥杯试题解答汇总链接

资源限制

       时间限制:1.0s 内存限制:512.0MB


问题描述

       
输入两个矩阵,分别是m* s,s*n大小。输出两个矩阵相乘的结果。


输入格式

       第一行,空格隔开的三个正整数m,s,n(均不超过200)。
  接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。
  接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。


输出格式

       m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。


样例输入

2 3 2
1 0 -1
1 1 -3
0 3
1 2
3 1

样例输出

-3 2
-8 2

提示

矩阵C应该是m行n列,其中C(i,j)等于矩阵A第i行行向量与矩阵B第j列列向量的内积。
例如样例中C(1,1)=(1,0,-1)*(0,1,3) = 1 * 0 +0*1+(-1)*3=-3

代码

#include <stdio.h>
int main(){
	int m,s,n;
	scanf("%d%d%d",&m,&s,&n);
	int i,j;
	int a[m][s],b[s][n],c[m][n];//a矩阵m行s列,b矩阵s行n列,c矩阵m行n列
	for(i=0;i<m;i++){
		for(j=0;j<s;j++){
			scanf("%d",&a[i][j]);//输入矩阵a
		}
	}
	for(i=0;i<s;i++){
		for(j=0;j<n;j++){
			scanf("%d",&b[i][j]);//输入矩阵b
		}
	}
	for(i=0;i<m;i++){
		for(j=0;j<n;j++){//矩阵c共要计算m*n次
			int k;
			c[i][j]=0;//初始化C(ij)为0
			for(k=0;k<s;k++){
				c[i][j]+=a[i][k]*b[k][j];//c的第i行第j个等于a的第i行,b的第j列对应相乘的和 
			}
			printf("%d ",c[i][j]);
		}
		printf("\n");//每一行结束输出一个换行
	}
	return 0;
}
发布了51 篇原创文章 · 获赞 58 · 访问量 4641

猜你喜欢

转载自blog.csdn.net/xyf0209/article/details/104263474