题目描述
给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有Ra行、Ca列,B有Rb行、Cb列,则只有Ca与Rb相等时,两个矩阵才能相乘。
输入格式:
输入先后给出两个矩阵A和B。对于每个矩阵,首先在一行中给出其行数R和列数C,随后R行,每行给出C个整数,以1个空格分隔,且行首尾没有多余的空格。输入保证两个矩阵的R和C都是正数,并且所有整数的绝对值不超过100。
输出格式:
若输入的两个矩阵的规模是匹配的,则按照输入的格式输出乘积矩阵AB,否则输出Error: Ca != Rb
,其中Ca
是A的列数,Rb
是B的行数。
矩阵乘法
设A为m*n的矩阵,B为x*y的矩阵,则m*y的矩阵C为矩阵A与矩阵B乘积,记做C=AB。
注意
1、当矩阵A的列数等于矩阵B的行数时,A与B可以相乘。
2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。
解:
知道了相关知识这道题就十分简单了
主代码:
for(int i=1;i<=m;i++)
{for(int j=1;j<=y;j++)
{
for(int k=1;k<=y;k++)
{
c[i][j]+=a[i][k]*b[k][j];
}
}
}
AC代码:
#include<iostream>
using namespace std;
int main()
{
int a[110][110];
int b[110][110];
int c[110][110]={0};
int m,n;
cin>>m>>n;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
int x,y;
cin>>x>>y;
for(int i=1;i<=x;i++)
{
for(int j=1;j<=y;j++)
{
cin>>b[i][j];
}
}
if(n!=x)
{
cout<<"Error: "<<n<<" != "<<x<< endl;
}
else
{
for(int i=1;i<=m;i++)
{
for(int j=1;j<=y;j++)
{
for(int k=1;k<=y;k++)
{
c[i][j]+=a[i][k]*b[k][j];
}
}
}
cout<<m<<" "<<y<<endl;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=y;j++)
{
cout<<c[i][j];
if(j==y)
{
cout<<endl;
}
else
{
cout<<" ";
}
}
}
}
return 0;
}
标签:Rb,int,Ca,列数,矩阵,110,天梯,L1,2017
From: https://blog.csdn.net/2301_81731156/article/details/137167243