分享

【Go语言入门100题】048 矩阵A乘以B (15 分) Go语言|Golang

 小生凡一 2021-11-30

【题解】【PTA团体程序设计天梯赛】

L1-048 矩阵A乘以B (15 分) Go语言|Golang

给定两个矩阵AB,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若ARa行、Ca列,BRb行、Cb列,则只有CaRb相等时,两个矩阵才能相乘。

输入格式:

输入先后给出两个矩阵AB。对于每个矩阵,首先在一行中给出其行数R列数C,随后R行,每行给出C个整数,以1个空格分隔,且行首尾没有多余的空格。输入保证两个矩阵的RC都是正数,并且所有整数的绝对值不超过100

输出格式:

若输入的两个矩阵的规模是匹配的,则按照输入的格式输出乘积矩阵AB,否则输出Error: Ca != Rb,其中CaA的列数,RbB的行数。

输入样例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()
}
}
}

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章