• C/C++语言100题练习计划 93——矩阵乘法(线性代数)


    名人说:博学之,审问之,慎思之,明辨之,笃行之。——《中庸》
    进度:C/C++语言100题练习计划专栏,目前93/100

    一、问题呈现

    1.问题描述

    Problem Description

    计算两个矩阵的乘法。 n × m n \times m n×m 阶的矩阵 A A A 乘以 m × k m \times k m×k 阶的矩阵 B B B 得到的矩阵 C C C n × k n \times k n×k 阶的,且 C [ i ] [ j ] = A [ i ] [ 0 ] × B [ 0 ] [ j ] + A [ i ] [ 1 ] × B [ 1 ] [ j ] + C[i][j]=A[i][0] \times B[0][j]+A[i][1] \times B[1][j]+ C[i][j]=A[i][0]×B[0][j]+A[i][1]×B[1][j]+ …… + A [ i ] [ m − 1 ] × B [ m − 1 ] [ j ] ( C [ i ] [ j ] +A[i][m-1] \times B[m-1][j](C[i][j] +A[i][m1]×B[m1][j](C[i][j] 表示 C C C 矩阵中第 i i i 行第 j j j 列元素)。

    2.输入输出

    Input

    第一行为 n , m , k n,m,k n,m,k,表示 A A A 矩阵是 n n n m m m 列, B B B 矩阵是 m m m k k k 列, n , m , k n,m,k n,m,k 均小于 100 100 100

    然后先后输入 A A A B B B 两个矩阵, A A A 矩阵 n n n m m m 列, B B B 矩阵 m m m k k k 列,矩阵中每个元素的绝对值不会大于 1000 1000 1000

    Output

    输出矩阵 C C C,一共 n n n 行,每行 k k k 个整数,整数之间以一个空格分开。

    3.测试样例

    Sample Input

    3 2 3
    1 1
    1 1
    1 1
    1 1 1
    1 1 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    Sample Output

    2 2 2
    2 2 2
    2 2 2
    
    • 1
    • 2
    • 3

    二、源码实现

    #include
    using namespace std;
    const int Maxn = 101;
    int a[Maxn][Maxn], b[Maxn][Maxn], c[Maxn][Maxn], n, m, k;
    
    int main()
    {
        cin >> n >> m >> k;
        
        //输入矩阵a(n*m)
        for(int i = 0;i < n;i++)
        {
    		for(int j = 0;j < m;j++)
    		{
    			cin >> a[i][j];
    		}
    		             
    	}
            
        //输入矩阵b(m*k) 
        for(int i = 0;i < m;i++)
        {
        	for(int j = 0;j < k;j++)
    		{
    			cin >> b[i][j]; 
    		}
    	}
            
                
        //枚举所有c[i][j](n*k)
    	for(int i = 0;i < n;i++) 
    	{
    		 for(int j = 0;j < k;j++)
    		 {
    		 	for(int x = 0;x < m;x++) //枚举变化的下标
    			{
    				c[i][j] += a[i][x] * b[x][j]; //累加求值
    			}	            
    		 }
    		      
    	}
           
        //输出经过运算后得到的矩阵c
    	for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < k;j++)
            {
    			cout << c[i][j] << " "; //输出乘法求结果后的每位
    		}
            cout << endl;
        }
        
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    ★关于本题思路及举例

    1、本题思路简述

    根据题意可知:矩阵乘法中第一个矩阵的列要等于第二个矩阵的行,一个 n×m 的 A 矩阵,和一个 m×k 的 B 矩阵相乘,将得到一个 n×k 的矩阵 C。如图:
    在这里插入图片描述
    (原图来自网络,二次创作,侵删)
    可得如下公式关系:
    在这里插入图片描述
    根据以上信息,我们就可以通过枚举处理,来解决本题了。

    2、举例
    在这里插入图片描述

    三、测试结果

    3 3
    1 2 3
    1 2 3
    1 2 3
    1 2 3
    4 5 6
    7 8 9
    2 4 6
    5 7 9
    8 10 12
    
    --------------------------------
    Process exited after 1.294 seconds with return value 0
    请按任意键继续. . .
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)
    如果对大家有帮助的话,希望大家能多多点赞+关注!这样我动力会更足哦! ღ( ´・ᴗ・` )比心

  • 相关阅读:
    【区块链 | solidity】智能合约Gas 优化的几个技术
    SpringCloud 之初识 GateWay
    测试用例的设计方法(全):等价类划分方法
    分布式系统架构需要解决的问题
    Guava入门~EventBus~Event Publishing示例
    java面向社区健康核酸预约服务的springboot医疗平台
    基于PHP+MySQL美食分享网站的设计与实现(含论文)
    关于微信小程序rich-text中图片宽度超出范围解决办法
    Kafka常用shell脚本命令
    MySQL性能调优
  • 原文地址:https://blog.csdn.net/qq_51646682/article/details/126948865