NC216103. 矩阵运算
描述
输入描述
第一行包括一个n(10<=n<=200)。
接下来n行,每行n个数,第i行第j个代表a(i,j)。
还有n行,第i行第j个数代表b(i,j)。(1<= a(i,j) , b(i,j) <= 100)
输出描述
n行,每行n个数字。代表答案矩阵
示例1
输入:
2 1 2 2 3 1 1 2 2
输出:
5 5 8 8
Python3(3.9) 解法, 执行用时: 1451ms, 内存消耗: 5336K, 提交时间: 2021-01-01 16:12:04
n = int(input()) a = [[int(val) for val in input().split()] for _ in range(n)] #input() b = [[int(val) for val in input().split()] for _ in range(n)] def matrixMul(A, B): res = [[0] * n for i in range(n)] for i in range(n): for j in range(n): for k in range(n): res[i][j] += A[i][k] * B[k][j] return res for row in matrixMul(a, b): print(*row)
C++(clang++11) 解法, 执行用时: 14ms, 内存消耗: 1144K, 提交时间: 2021-01-01 15:17:28
#include<stdio.h> int a[210][210],b[210][210],c[210][210]; int n,i,j,k,h; int main(){ scanf("%d",&n); for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%d",&a[i][j]); for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%d",&b[i][j]); for(h=1;h<=n;h++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) c[h][i]+=a[h][j]*b[j][i]; for(i=1;i<=n;i++) { for(j=1;j<n;j++) printf("%d ",c[i][j]); printf("%d\n",c[i][j]); } }
C(clang11) 解法, 执行用时: 22ms, 内存消耗: 1092K, 提交时间: 2021-01-29 18:51:59
#include<stdio.h> int main() { int i,j,k,l,n; int a[201][201],b[201][201]; scanf("%d",&n); for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]); for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&b[i][j]); for(l=0;l<n;l++){ for(k=0,i=0;i<n;i++,k=0){ for(j=0;j<n;j++) k+=a[l][j]*b[j][i]; printf("%d ",k); } printf("\n"); } }