L1-048 矩阵A乘以B 仓颉(cangjie)
·
L1-048 矩阵A乘以B
分数 15
作者 陈越
单位 浙江大学
给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有Ra行、Ca列,B有Rb行、Cb列,则只有Ca与Rb相等时,两个矩阵才能相乘。
输入格式:
输入先后给出两个矩阵A和B。对于每个矩阵,首先在一行中给出其行数R和列数C,随后R行,每行给出C个整数,以1个空格分隔,且行首尾没有多余的空格。输入保证两个矩阵的R和C都是正数,并且所有整数的绝对值不超过100。
输出格式:
若输入的两个矩阵的规模是匹配的,则按照输入的格式输出乘积矩阵AB,否则输出Error: Ca != Rb,其中Ca是A的列数,Rb是B的行数。
输入样例1:
2 3
1 2 3
4 5 6
3 4
7 8 9 0
-1 -2 -3 -4
5 6 7 8
输出样例1:
2 4
20 22 24 16
53 58 63 28
输入样例2:
3 2
38 26
43 -5
0 17
3 2
-11 57
99 68
81 72
输出样例2:
Error: 2 != 3
仓颉(cjc)
import std.console.*
import std.convert.*
main(): Unit {
let no_array = Array(10, item: 0)
var ra = 0
var ca = 0
var rb = 0
var cb = 0
var get: Array<String>
get = Console.stdIn.readln().getOrThrow().split(" ")
ra = Int64.parse(get[0])
ca = Int64.parse(get[1])
var a: Array<Array<Int64>> = Array<Array<Int64>>(ra, item: no_array)
for (i in 0..ra) {
get = Console.stdIn.readln().getOrThrow().split(" ")
a[i] = Array<Int64>(ca, item: -1)
for (j in 0..ca) {
a[i][j] = Int64.parse(get[j])
}
}
get = Console.stdIn.readln().getOrThrow().split(" ")
rb = Int64.parse(get[0])
cb = Int64.parse(get[1])
var b: Array<Array<Int64>> = Array<Array<Int64>>(rb, item: no_array)
for (i in 0..rb) {
get = Console.stdIn.readln().getOrThrow().split(" ")
b[i] = Array<Int64>(cb, item: -1)
for (j in 0..cb) {
b[i][j] = Int64.parse(get[j])
}
}
if (ca != rb) {
print("Error: ${ca} != ${rb}")
return
}
var c: Array<Array<Int64>> = Array<Array<Int64>>(ra, item: no_array)
for (i in 0..ra) {
c[i] = Array<Int64>(cb, item: -1)
for (j in 0..cb) {
var sum = 0
for (k in 0..ca) {
sum += (a[i][k] * b[k][j])
}
c[i][j] = sum
}
}
println("${ra} ${cb}")
for (i in 0..ra) {
for (j in 0..cb) {
if (j == 0) {
print(c[i][j])
} else {
print(" ${c[i][j]}")
}
}
println()
}
}

更多推荐

所有评论(0)