Go语言入门150题 L1-048 矩阵A乘以B (15 分) Go语言|Golang
Posted 小生凡一
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言入门150题 L1-048 矩阵A乘以B (15 分) Go语言|Golang相关的知识,希望对你有一定的参考价值。
【题解】【PTA团体程序设计天梯赛】
L1-048 矩阵A乘以B (15 分) Go语言|Golang
给定两个矩阵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
结尾无空行
思路:
- 矩阵的运算,如果不懂矩阵的运算要自己补一下这方向的知识了。
- 注意运算是有规律的,所以可以按照规律来进行技术就好了。
- 还有一点是注意输出的格式。
代码如下:
package main
import "fmt"
func main() {
var rowa, linea int
_, _ = fmt.Scan(&rowa, &linea)
var a [100][100]int
for i := 0; i < rowa; i++ {
for j := 0; j < linea; j++ {
_, _ = fmt.Scan(&a[i][j])
}
}
var rowb, lineb int
_, _ = fmt.Scan(&rowb, &lineb)
var b [100][100] int
for i := 0; i < rowb; i++ {
for j := 0; j < lineb; j++ {
_, _ = fmt.Scan(&b[i][j])
}
}
if linea != rowb { // 如果不满足这个条件,就输出这个
fmt.Printf("Error: %d != %d", linea, rowb)
return
}
fmt.Printf("%d %d\\n",rowa,lineb) // 先输出行和列
var c [100][100]int
for i := 0; i < rowa; i++ { //进行计算
for j := 0; j < lineb; j++ {
sum:=0
for k := 0; k < linea; k++ {
sum += a[i][k] * b[k][j] // 找到规律就行了
}
c[i][j] = sum // 写入到新的列表当中
}
}
for i := 0; i < rowa; i++ {
for j := 0; j < lineb; j++ {
if j == lineb-1 {
fmt.Printf("%d", c[i][j]) // 注意输出格式
}else{
fmt.Printf("%d ", c[i][j])
}
}
if i != rowa-1 {
fmt.Println()
}
}
}
以上是关于Go语言入门150题 L1-048 矩阵A乘以B (15 分) Go语言|Golang的主要内容,如果未能解决你的问题,请参考以下文章
Go语言入门150题L1-050 倒数第N个字符串 (15 分) Go语言|Golang
Go语言入门150题L1-065 嫑废话上代码 (5 分) Go语言 | Golang
Go语言入门150题 L1-051 打折 (5 分) Go语言|Golang
Go语言入门150题 L1-067 洛希极限 (10 分) Go语言 | Golang