[解题报告]【第35题】给定两个 a X b 和 c X d 的矩阵 ,求两个矩阵的乘积

请添加图片描述


今天是c语言基础打卡的第35天,主要内容是矩阵的操作,希望大家能够理解呢,我就给大家记一下重点,给点课后题提示0.0。

相关链接:
【第35题】给定两个 a X b 和 c X d 的矩阵 ,求两个矩阵的乘积

🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人
✨联系方式:2201891280(QQ)

全文大约阅读时间: 10min


🎁主要知识点

矩阵乘法

三重循环冲,就是模拟矩阵乘法的规则

void multiplyMatrix(int a, int b, int matA[maxn][maxn], int c, int d, int matB[maxn][maxn], int matRet[maxn][maxn]) {
    // assert(b == c);
    int i, j, k;
    for(i = 0; i < a; ++i) {
        for(j = 0; j < d; ++j) {
            matRet[i][j] = 0;
            for(k = 0; k < b; ++k) {
                matRet[i][j] += matA[i][k] * matB[k][j];  //  矩阵乘法的计算规则
             }
        }
    }
}

📓课后习题

面试题 01.08. 零矩阵

面试题 01.08. 零矩阵

编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。

解题思路

为了节约空间,可以利用第一行和第一列元素进行标记此行是否清零。为了第一列的元素能确定是否需要清零,可以用一个变量进行标记。
同时,为了防止第一行元素过早被污染,转换元素的时候最后再处理第一行。

void setZeroes(int** matrix, int matrixSize, int* matrixColSize){
    int m = matrixSize,n = matrixColSize[0];//记录行列值
    bool flag_col0 = false;
    for(int i = 0;i < m;++i){       //更新第一行第一列所有元素作为标记
        if(!matrix[i][0])   flag_col0 = true;   //记录第一列是否有0元素
        for(int j = 1;j < n; ++j){  //从第第二行开始更新第一行和第一列元素
            if(!matrix[i][j])
                matrix[i][0] = matrix[0][j] = 0;
        }
    }
    for(int i = m - 1; i >= 0; --i){//从最最后一行开始更新元素 防止覆盖 因为第一行为标记元素
        for(int j = 1;j < n;++j){   
            if((!matrix[i][0]) || (!matrix[0][j]))//有标记需要变成0
                matrix[i][j] = 0;
        }
        if(flag_col0)
            matrix[i][0] = 0;
    }

}

📑写在最后

今晚考试0.0,还没看完,慌张,今天的这个题有点难了 ,希望大家能理解,有什么不理解的欢迎留言或者你能找到的联系方式问我也是可以的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XingleiGao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值