首页 > 编程语言 >PTA 团体程序设计天梯赛 15分题 048

PTA 团体程序设计天梯赛 15分题 048

时间:2025-01-13 16:05:53浏览次数:3  
标签:15 分题 矩阵 ++ int vector result 048 const

L1-048 矩阵A乘以B(15)

题目要求

给定两个矩阵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的行数。

分析

本题涉及到矩阵的运算,首先明确,两矩阵相乘,前面矩阵A的列数和后面矩阵B的行数相等才能相乘,结果矩阵C的行数为A矩阵的行数,C的列数为B矩阵的列数   

由于c++中没有直接进行矩阵操作的功能函数,因此可以采用数组或者vector等容器实现矩阵的存储和操作。本题可以采用vector容器实现,由于是二维矩阵,因此需要创建二维vector来存储矩阵元素,如用 vector<vector<int>> 来存储整数元素的矩阵。

  • 使用vector进行矩阵运算用法如下
#include <iostream>
#include <vector> 
using namespace std;
 
// 矩阵加法
void addMatrices(const vector<vector<int>>& A, const vector<vector<int>>& B, vector<vector<int>>& result) {
    int ROW = A.size();
    int COL = A[0].size();
    for (int i = 0; i < ROW; i++) {
        for (int j = 0; j < COL; j++) {
            result[i][j] = A[i][j] + B[i][j];
        }
    }
}
 
// 矩阵乘法
void multiplyMatrices(const vector<vector<int>>& A, const vector<vector<int>>& B, vector<vector<int>>& result) {
    int ROW = A.size();
    int COL = B[0].size();
    int commonDim = A[0].size(); // A的列数和B的行数必须相同
    for (int i = 0; i < ROW; i++) {
        for (int j = 0; j < COL; j++) {
            result[i][j] = 0;
            for (int k = 0; k < commonDim; k++) {
                result[i][j] += A[i][k] * B[k][j];
            }
        }
    }
}
// 打印矩阵
void printMatrix(const vector<vector<int>>& matrix) {
    for (const auto& row : matrix) {
        for (const auto& elem : row) {
            cout << elem << " ";
        }
        cout << endl;
    }
}
 
int main() {
    // 定义2x2矩阵
    vector<vector<int>> A = {
  
  {1, 2}, {3, 4}};
    vector<vector<int>> B = {
  
  {5, 6}, {7, 8}};
 
    // 创建结果矩阵,初始化为0
    vector<vector<int>> result(2, vector<int>(2, 0));
 
    // 矩阵加法
    addMatrices(A, B, result);
    cout << "矩阵加法结果:" << endl;
    printMatrix(result);
 
    // 矩阵乘法
    multiplyMatrices(A, B, result);
    cout << "矩阵乘法结果:" << endl;
    printMatrix(result);
 
    return 0;
}

                                                                                     

代码

#include <iostream>
#include <vector>
using namespace std;
int main(){
    int RA,CA,RB,CB,num; //A的行、列,B的行、列,
    cin >> RA >> CA; //输入A的行、列
    //创建一个包含 RA 个 vector<int>(CA) 的二维向量,存储A矩阵的容器
    vector <vector<int>> matrixA(RA,vector<int>(CA));
    for(int m = 0; m < RA; m++){
        for(int n = 0;n < CA; n++){
            cin >> num;
            matrixA[m][n] = num;
        }
    }
    cin >> RB >> CB; //输入B矩阵的行、列
    vector <vector<int>> matrixB(RB,vector<int>(CB));
    for(int m = 0; m < RB; m++){
        for(int n = 0;n < CB; n++){
            cin >> num;
            matrixB[m][n] = num;
        }
    }
    //结果矩阵,元素初始化为0
    vector <vector<int>> matrixC(RA,vector<int>(CB,0));
    // cout << CA <<" "<< RB <<endl;
    //判断矩阵是否能够相乘 CA=RB?
    //CA = RB可以相乘
    if(CA == RB){
        cout << RA <<" "<< CB << endl;;
        for(int m = 0; m < RA; m++){
            for(int n = 0;n < CB;n++){
                for(int i = 0;i < CA;i++){
                    matrixC[m][n] += matrixA[m][i] * matrixB[i][n]; //乘积累加
                }
            }
        }
       for (const auto& row : matrixC) {
           int mm = 1; //用于计算输出个数
        for (int elem : row) {
            if(mm < CB){
                // cout << "CBe" << CB<<" ";
                std::cout << elem << " ";
                mm++;
                // cout << "m" << mm << " ";
            }else{
                // cout << "CBo" << CB;
                std::cout << elem << endl;
                mm = 1;
            }
        }
      }
    }
    //矩阵不能相乘
    else if(CA != RB){
        cout << "Error: " << CA << " != " << RB <<endl;
    }
    return 0;
}

标签:15,分题,矩阵,++,int,vector,result,048,const
From: https://blog.csdn.net/LxiazichengxiL/article/details/144991679

相关文章

  • 国产人形机器人街头亮相海外走红,15万元售价引专家质疑
    据量子位报道,近日,一款国产机器人深圳街头散步的视频火到了国外。这款机器人在周围都是围观群众的情况下轻松走出去十几米。英伟达的科学家JimFan都有点怀疑这是不是AI生成的。据网友透露,这款机器人来自众擎机器人,刚发布半个月,最近还去参加了CES。其诞生于深圳,背后公司成......
  • springboot短视频推荐系统-计算机设计毕业源码21503
    基于协同过滤算法的短视频推荐系统摘 要本论文基于协同过滤算法,旨在设计并实现一种基于SpringBoot框架的短视频推荐系统。该系统主要分为平台用户和管理员两类角色,用户可以注册、登录、浏览短视频内容,并根据个人兴趣收藏喜爱的视频。管理员则可以管理系统数据、用户和内容......
  • springboot短视频推荐系统-计算机设计毕业源码21503
    基于协同过滤算法的短视频推荐系统摘 要本论文基于协同过滤算法,旨在设计并实现一种基于SpringBoot框架的短视频推荐系统。该系统主要分为平台用户和管理员两类角色,用户可以注册、登录、浏览短视频内容,并根据个人兴趣收藏喜爱的视频。管理员则可以管理系统数据、用户和内容......
  • P11559 【MX-X7-T0】[LSOT-3] 嗯欧哎
    用函数实现等级映射multiset打表比对include<bits/stdc++.h>usingnamespacestd;constintN=10010;intfun(intn){if(n>=85)return5;elseif(n>=45)return4;elseif(n>=25)return3;elseif(n>=1)return2;elsereturn1;}intmain(){multiset......
  • 江南鹤微信hook最新版 3.9.12.15功能列表
    详询微信weixinhook主动调用登录刷新登录二维码注销登录退出微信当前登录帐号信息联系人获取好友列表获取指定好友信息获取好友简要信息_协议获取好友详细信息_协议指量获取好友信息_协议修改好友备注添加好友分享的名片同意加好友请求删除好友搜索微信用户添......
  • 网络平台搭建与设备安全防护(部分题型)
    DCRS文章目录DCRS1.创建用户密码题目2.加大带宽3.端口安全1.ARP欺骗2.环路检测3.MAC地址泛洪攻击4.MAC、ARP、ND限制4.SNMP网络管理协议5.认证服务器Radius6.端口am合法包丢弃7.DHCP动态ARP检测8.ARP扫描、检测,欺骗9.广播风暴抑制storm10.访问控制/蠕虫病......
  • leetcode115 不同的子序列
    给定两个字符串s和t,统计并返回在s的子序列中t出现的个数,结果对1E9+7取模。1<=|s|,|t|<=1000分析:判断两字符串的最后一个字符:如果相同,则可以选择匹配或者不匹配;如果不同,则只能选择不匹配。初始条件:t为空时答案为1。mintdp[1005][1005];classSolution{public:intnumDi......
  • 代码随想录训练营第四十五天| 115.不同的子序列 583. 两个字符串的删除操作 72. 编辑
    115.不同的子序列题目链接:115.不同的子序列-力扣(LeetCode)讲解链接:代码随想录 hard确实不好直接说出来粘一下思路:(引自代码随想录)确定dp数组(dptable)以及下标的含义dp[i][j]:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]。为什么i-1,j-1这么定义卡哥......
  • LeetCode Top Interview 150 - Matrix
    ThisismerelymypersonalreviewofallthetypicalproblemsthatconstitutethemindsetforDataStructuresandAlgorithms(DSA).pythonsolutionprovidedFortheremainingtypesofproblems,pleaserefertomychannel.everecursion-CSDN博客everecursion......
  • 施耐德 三菱 西门子PLC 以太网口S7-1200/1500系列通讯协议解析说明文档
       资料参考链接:https://item.taobao.com/item.htm?abbucket=1&id=766532329733&ns=1&pisk=g0VseN0PDhxsC5j0KlbEVm4PVjhjhw5yfEgYrrdwkfhtDJaucc7cIfyIckEIXC7GIxnbjfH0QmoZcja0VwSPa_zgSjcR4g5yCEod7bAxWqKqv23rGVC1T97TSjcA4eRAU_ag2s7Opd3xJwgqlFnYDAhpvVoKWd......