您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

PTA 2021年天梯赛习题集 L1-048 矩阵A乘以B

矩阵A乘以B

给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有R​a行、C​a列,B有Ra​​ 行、C​b 列,则只有Ca与Rb相等时,两个矩阵才能相乘。

输入格式:

输入先后给出两个矩阵A和B。对于每个矩阵,首先在一行中给出其行数R和列数C,随
后R行,每行给出C个整数,以1个空格分隔,且行首尾没有多余的空格。输入保证两
个矩阵的R和C都是正数,并且所有整数的绝对值不超过100

输出格式:

若输入的两个矩阵的规模是匹配的,则按照输入的格式输出乘积矩阵AB,否则输出
Error: Ca != Rb,其中Ca是A的列数,Rb是B的行数。

输入样例1:

2 3
1 2 3
4 5 6
3 4
7 8 9 0
-1 -2 -3 -4
5 6 7 8

输出样例1:

2 4
20 22 24 16
53 58 63 28

输入样例2:

3 2
38 26
43 -5
0 17
3 2
-11 57
99 68
81 72

输出样例2:

Error: 2 != 3

矩阵乘法
矩阵相乘只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义,设A为m x p 的矩阵,B为p x n 的矩阵,那么称m x n的矩阵C为矩阵A与B的乘积 ,其中矩阵C中的第 行第 列元素可以表示为
矩阵相乘

矩阵乘法
矩阵相乘

#include<iostream>

using namespace std;

int main(void)
{
	int arr1[100][100];
	int arr2[100][100];
	int ans[100][100]{};
	int ah, al, bh, bl;
	int i, j, k;

	cin >> ah >> al;
	
	for (i = 0; i < ah; i++)
		for (j = 0; j < al; j++)
			cin >> arr1[i][j];

	cin >> bh >> bl;
	for (i = 0; i < bh; i++)
		for (j = 0; j < bl; j++)
			cin >> arr2[i][j];
	if (al == bh)
	{
        /*这三个循环可以完全遵循矩阵乘法顺序写成i,j,k
        但i,j,k的写法适合人类运算并不适和计算机运算因为矩阵在计算机中是线性存储的
        i, k, j的写法刚好能根据线性存储提取数据并及时,这样子处理能更快完成运算*/
		for (i = 0; i < ah; i++)
            for (k = 0; k < al; k++)
			    for (j = 0; j < bl; j++)
					ans[i][j] += arr1[i][k] * arr2[k][j];
		cout << ah << " " << bl << endl;
		for (i = 0; i < ah; i++)
		{
			for (j = 0; j < bl; j++)
            {
				cout << ans[i][j];
                if (j != bl - 1)
                    cout << " ";
            }
			cout << endl;
		}
	}
	else
	{
		//Error: 2 != 3
		cout << "Error: " << al << " != " << bh << endl;
	}
	return 0;
}

分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进