PTA L1-048 矩阵A乘以B C++实现
2020-03-06 16:31
936 查看
矩阵A乘以B
给定两个矩阵AAA和BBB,要求你计算它们的乘积矩阵ABABAB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若AAA有RaR_aRa行、CaC_aCa列,BBB有RbR_bRb行、CbC_bCb列,则只有CaC_aCa与RbR_bRb相等时,两个矩阵才能相乘。输入格式:输入先后给出两个矩阵AAA和BBB。对于每个矩阵,首先在一行中给出其行数RRR和列数CCC,随后RRR行,每行给出CCC个整数,以1个空格分隔,且行首尾没有多余的空格。输入保证两个矩阵的RRR和CCC都是正数,并且所有整数的绝对值不超过100。输出格式:若输入的两个矩阵的规模是匹配的,则按照输入的格式输出乘积矩阵ABABAB,否则输出Error: Ca != Rb,其中Ca是AAA的列数,Rb是BBB的行数。
输入样例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
Talk is cheap. Show me the code.
#include<iostream> using namespace std; int main() { int row_a=0,col_a=0; cin>>row_a>>col_a; int arr_a[row_a*col_a]={0}; for(int i=0;i<row_a*col_a;i++) { cin>>arr_a[i]; } int row_b=0,col_b=0; cin>>row_b>>col_b; int arr_b[row_b*col_b]={0}; for(int i=0;i<row_b*col_b;i++) { cin>>arr_b[i]; } if(col_a!=row_b) { cout<<"Error: "<<col_a<<" != "<<row_b; return 0; } else { cout<<row_a<<" "<<col_b<<endl; } for(int i=0;i<row_a;i++) { for(int j=0;j<col_b;j++) { int sum=0; for(int k=0;k<col_a;k++) { sum=sum+arr_a[k+i*col_a]*arr_b[j+k*col_b]; } cout<<sum; if(j<col_b-1) { cout<<" "; } } cout<<endl; } }
解题思路
这个题主要就是如何寻找矩阵的坐标,因为矩阵相乘是用一行乘以另一个矩阵的一列,然后求和输出。
分步代码解释
1.
for(int i=0;i<row_a;i++) { for(int j=0;j<col_b;j++) { int sum=0; for(int k=0;k<col_a;k++) { sum=sum+arr_a[k+i*col_a]*arr_b[j+k*col_b]; } cout<<sum; if(j<col_b-1) { cout<<" "; } } cout<<endl; }
外层循环是根据相乘后矩阵的行数输出,中层循环是根据相乘后矩阵的列数输出,内层循环是计算相乘后矩阵每一个数并输出。我只用了两个一维数组来存储矩阵,根据规律可以找到矩阵A每一行的坐标公式为k+icol_a,k指每一行的第几个数,icol_a指第几行;矩阵B每一列的坐标公式为j+kcol_b,j指第几列,kcol_b根据j得到这一列的数。sum求和输出即可。
易错点
1.
输出相乘后的矩阵时每一行最后不能有空格否则会出现格式错误。
测试结果
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- PTA L1-048 矩阵A乘以B (15分)
- C++ L1-048. 矩阵A乘以B
- L1-048. 矩阵A乘以B
- L1-048. 矩阵A乘以B
- L1-048 矩阵A乘以B
- L1-048. 矩阵A乘以B
- L1-048. 矩阵A乘以B
- L1-048. 矩阵A乘以B
- L1-048. 矩阵A乘以B
- L1-048. 矩阵A乘以B(矩阵乘法)
- L1-048 矩阵A乘以B
- L1-048 矩阵A乘以B(矩阵乘法运算)
- 天梯赛L1-048矩阵A乘以B
- 天梯赛习题 L1-048. 矩阵A乘以B
- L1-048. 矩阵A乘以B
- L1-048. 矩阵A乘以B
- PAT L1-048 矩阵A乘以B
- L1-048 矩阵A乘以B (15 分)
- 【天梯赛】L1-048. 矩阵A乘以B
- L1-048. 矩阵A乘以B