HZNUOJ 2003 矩阵乘法

HZNUOJ 2003 矩阵乘法

题目描述

在这里插入图片描述

解题思路和注意点

本题是个简单的练习多层for循环以及二维数组读写的题目,难度不大,只需要运用线性代数中简单的矩阵乘法原理构建出结果的二维数组即可,需要注意的主要是输出的格式,以及C矩阵的大小是n*k,步骤如下:

  1. 读取题目所给的两个矩阵A和B ,用两个两层for循环实现即可;
  2. 定义出结果矩阵C,并初始化其中的值为0,以便后续的计算;
  3. 运用3层循环实现对矩阵C中各个位置的求值;
  4. 输出求得的矩阵C,输出注意换行和空格

矩阵乘法的代码实现原理

在矩阵C中,C [ i ] [ j ] 的值取决于A矩阵的行和B矩阵的列,且下标从0开始有:

  • C[i][j] = A[i][0]+B[0][j] + A[i][1]+B[1][j] +……+ A[i][k-1]+B[k-1][j]

用for循环来实现这个求和过程,即

for(int z=0;z<m;z++) 
{
	c[i][j]+=a[i][z]*b[z][j]; 
}

其中m是A的行数和B的列数,z变动时即对应的A[i][z]和B[z][j]相加

AC代码

#include<stdio.h>
#include<math.h>
#include<string.h>

int main(void)
{
	int n,m,k;
	int a[22][22],b[22][22],c[22][22];//a是第一个矩阵,b是第二个,c是相乘后的结果 
	//读入两个矩阵a和b 
	scanf("%d%d%d",&n,&m,&k);
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			scanf("%d",&a[i][j]);
		}
	} 
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<k;j++)
		{
			scanf("%d",&b[i][j]);
		}
	}
	//将c初始化
	//其中c是nxk的矩阵,即c中i的范围是0-n,j的范围是0-k
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<k;j++)
		{
			c[i][j]=0;
		}
	}
	//根据线代矩阵乘法的原理(行乘列)
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<k;j++)//外两层循环构建c
		{
			for(int z=0;z<m;z++)//第三层用来行乘列 
			{
				c[i][j]+=a[i][z]*b[z][j]; 
			}
		} 
	}
	//输出
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<k;j++)
		{
			printf("%d ",c[i][j]);
			if(j==k-1) printf("\n");//判断换行 
		}
	} 
	return 0; 
}

此题不难,再接再厉!

展开阅读全文

Windows版YOLOv4目标检测实战:训练自己的数据集

04-26
©️2020 CSDN 皮肤主题: 游动-白 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值