大家可能也发现我是实时更新的,所以大家可以多点赞,觉得不懂的或者有些建议请留言评论,多给我些反馈,可以让我更好的编写博客内容。
题目描述
给你两个矩阵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
解题思路:本题就是在于 矩阵运算,其他的没什么大问题,细节注意 两矩阵相乘,新的行列是左矩阵的行和右矩阵的列组成的。所以注意 20、 22 、25 行的for循环的判断值。
AC代码:
#include <stdio.h>
int K,n1,m1,n2,m2;
int A[11][11],B[11][11],C[11][11];
int main()
{
scanf("%d",&K);
while ( K --)
{
scanf("%d %d",&n1,&m1); // 输入
for (int i = 1; i <= n1; i ++)
for (int j = 1; j <= m1; j ++)
scanf("%d",&A[i][j]);
scanf("%d %d",&n2,&m2);
for (int i = 1; i <= n2; i ++)
for (int j = 1; j <= m2; j ++)
scanf("%d",&B[i][j]);
for (int i = 1; i <= n1; i ++) // 矩阵相乘
{
for (int j = 1; j <= m2; j ++)
{
int t = 0;
for (int k = 1; k <= m1; k ++)
t += (A[i][k]*B[k][j]);
C[i][j] = t;
}
}
for (int i = 1; i <= n1; i ++) // 输出
{
printf("%d",C[i][1]);
for (int j = 2; j <= m2; j ++)
printf(" %d",C[i][j]);
puts("");
}
}
return 0;
}