题解 | #矩阵乘法#

矩阵乘法

https://www.nowcoder.com/practice/ebe941260f8c4210aa8c17e99cbc663b

package main

import (
    "fmt"
)

func multi(a []int, b []int) int {
    var sum int
    for i:=0; i<len(a); i++ {
        sum += a[i] * b[i]
    }

    return sum
}

func multiMatrix(a [][]int, b [][]int) [][]int {
    rowA, _ := len(a), len(a[0])
    rowB, colB := len(b), len(b[0])
    rowC, colC := rowA, colB

    // 初始化结果矩阵
    c := make([][]int, rowC)
    for i:=0; i<rowC; i++ {
        c[i] = make([]int, colC)
    }

    for i:=0; i<rowC; i++ {
        for j:=0; j<colC; j++ {
            // 计算每一个位置的结果
            var arr1, arr2 []int
            arr1 = a[i]
            for k:=0; k<rowB; k++ {
                arr2 = append(arr2, b[k][j])
            }

            c[i][j] = multi(arr1, arr2)
        }
    }

    return c
}

func main() {
    var rowA int
    var colA int
    var rowB int
    var colB int

    fmt.Scan(&rowA, &colA, &colB)
    rowB = colA

    a := make([][]int, rowA)
    for i:=0; i<rowA; i++ {
        a[i] = make([]int, colA)
    }
    b := make([][]int, rowB)
    for i:=0; i<rowB; i++ {
        b[i] = make([]int, colB)
    }

    for i:=0; i<rowA; i++ {
        for j:=0; j<colA; j++ {
            var num int
            fmt.Scan(&num)
            a[i][j] = num
        }
    }

    for i:=0; i<rowB; i++ {
        for j:=0; j<colB; j++ {
            var num int
            fmt.Scan(&num)
            b[i][j] = num
        }
    }

    // fmt.Printf("a: %+v\n", a)
    // fmt.Printf("b: %+v\n", b)

    c := multiMatrix(a, b)

    for i:=0; i<len(c); i++ {
        for j:=0; j<len(c[0]); j++ {
            fmt.Printf("%d ", c[i][j])
        }
        fmt.Println()
    }
}
// 本题输入为两个整形矩阵,所以采用 fmt.Scan(&num)

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务