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