列表

详情


NC216103. 矩阵运算

描述

QingWow最近在学线性代数,他对矩阵乘法很感兴趣。现在有两个n阶矩阵a和b,请输出这两个矩阵相乘的结果。矩阵乘法如下图所示:

输入:第一行包括一个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个数字。

输入描述

第一行包括一个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");
} 
}

上一题