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()
}
}
}