输入样例
2 3
1 2 3
4 5 6
3 4
7 8 9 0
-1 -2 -3 -4
5 6 7 8
输出样例
2 4
20 22 24 16
53 58 63 28
输入样例
3 2
38 26
43 -5
0 17
3 2
-11 57
99 68
81 72
输出样例
Error: 2 != 3
思路就是老老实实计算,三个数组,给定的两个需要用两个数组来存放,第三个数组用来存放计算过的新矩阵
#include<bits/stdc++.h>
using namespace std;
int main(){
int R1,R2,C1,C2;
cin>>R1>>C1;
int a[R1][C1];
for(int i=0;i<R1;i++){
for(int j=0;j<C1;j++){
cin>>a[i][j];
}
}
cin>>R2>>C2;
int b[R2][C2];
for(int i=0;i<R2;i++){
for(int j=0;j<C2;j++){
cin>>b[i][j];
}
}
if(C1==R2){//前列等于后行可执行
int c[R1][C2]={0};//新矩阵前行后列标准
cout<<R1<<" "<<C2<<endl;
for(int i=0;i<R1;i++){
for(int j=0;j<C2;j++){
//!!每一次对应位置后,要记得清零,之后再算下一个位置
c[i][j]=0;
for(int k=0;k<R2;k++){
//因为矩阵运算后新的对应位置是乘积加和,
//所以就想到定了k
c[i][j]+=a[i][k]*b[k][j];
}
}
}
//接下来进行输出
for(int i=0;i<R1;i++){
for(int j=0;j<C2;j++){
if(j==0) cout<<c[i][j];
else cout<<" "<<c[i][j];
}
cout<<endl;//回车呀!又忘记了
}
}else
cout<<"Error: "<<C1<<" != "<<R2<<endl;
}
这里有几个小细节
1.abc数组可以根据输入的行列直接作为数组的行列大小
2.输出方式的格式控制要小心
3.每次计算出一个新矩阵的数时,要给数组清零,再计算下一个
4.k的定义。!!!