supercell账号注册网站,广州app开发公司排名十强,王也高清头像,网页无法访问什么原因原题
题目描述
给你两个矩阵A(n*k),B(k*m),请求A*B。
输入
第一行是一个整数K#xff0c;表示样例的个数。 每个样例包含两个矩阵A和B。 每个矩阵的第一行是两个整数n,m,(1≤n,m≤10)表示矩阵的行和列 以后的n行#xff0c;每行m个整数#xff0c;每个整数的绝对值不超过…原题
题目描述
给你两个矩阵A(n*k),B(k*m),请求A*B。
输入
第一行是一个整数K表示样例的个数。 每个样例包含两个矩阵A和B。 每个矩阵的第一行是两个整数n,m,(1≤n,m≤10)表示矩阵的行和列 以后的n行每行m个整数每个整数的绝对值不超过100。输入保证A和B是可乘的。
输出
输出每个样例的结果矩阵矩阵的整数之间用一个空格隔开行尾无空格。
样例输入
2
2 2
1 1
1 1
2 1
1
1
2 2
1 1
1 1
2 2
1 1
1 0
样例输出
2
2
2 1
2 1
原题链接
传送门
代码
#includebits/stdc.h
using namespace std;const int N20;
int a[N][N],b[N][N],c[N][N];int main()
{int t;scanf(%d,t);while(t--){int n,k,l,m;scanf(%d%d,n,k);for(int i0;in;i){for(int j0;jk;j){scanf(%d,a[i][j]);}}scanf(%d%d,l,m);for(int i0;il;i){for(int j0;jm;j){scanf(%d,b[i][j]);}}for(int i0;in;i){for(int j0;jm;j){c[i][j]0;for(int h0;hk;h){c[i][j]a[i][h]*b[h][j];}printf(%d,c[i][j]);if(j!m-1) printf( );}printf(\n);}}return 0;
}
总结
1.矩阵乘法是啥对我来说可能是这道题最大的难点矩阵乘法简单来说给定两个矩阵第一个矩阵的列数和第二个矩阵的行数相等两个矩阵相乘的结果是一个新的矩阵新的矩阵行数和第一个矩阵相等列数和第二个矩阵相等比如一个2行3列的矩阵乘以一个3行2列的矩阵答案是一个2行2列的矩阵答案矩阵的第一行第一个元素是第一个矩阵第一行的所有元素和第二个矩阵第一列的所有元素逐项相乘并求和答案矩阵第一行第二个元素是第一个矩阵第一行所有元素和第二个矩阵第二列所有元素逐项相乘并求和
2.题目保证了第一个矩阵的列数等于第二个矩阵的行数
3.行尾没有空格注意判断每一行最后一个元素的数组下标
4.每一次使用c数组都需要初始化防止前一次循环对当前循环产生影响
5.有时候感觉一摸一样的代码难以ac重新敲一遍可以通过算是一个魔咒还是因为啥原原因……