当前位置: 首页 > news >正文

PTA: 矩阵的乘法运算

矩阵的乘法运算

  • 题目
    • 输入格式
    • 输出格式
    • 输入样例
    • 输出样例
  • 代码

题目

线性代数中的矩阵可以表示为一个row*column的二维数组,当row和column均为1时,退化为一个数,当row为1时,为一个行向量,当column为1时,为一个列向量。
建立一个整数矩阵类matrix,其私有数据成员如下:

int row;
int column;
int **mat;

建立该整数矩阵类matrix构造函数;
建立一个 *(乘号)的运算符重载,以便于对两个输入矩阵进行乘法运算;
建立输出函数void display(),对整数矩阵按行进行列对齐输出,格式化输出语句如下:

cout<<setw(10)<<mat[i][j];
//需要#include <iomanip>

主函数里定义三个整数矩阵类对象m1、m2、m3.

输入格式

分别输入两个矩阵,分别为整数矩阵类对象m1和m2。
每个矩阵输入如下:
第一行两个整数 r c,分别给出矩阵的行数和列数
接下来输入r行,对应整数矩阵的每一行
每行输入c个整数,对应当前行的c个列元素

输出格式

整数矩阵按行进行列对齐(宽度为10)后输出
判断m1和m2是否可以执行矩阵相乘运算。
若可以,执行m3=m1*m2运算之后,调用display函数,对m3进行输出。
若不可以,输出"Invalid Matrix multiplication!"
提示:输入或输出的整数矩阵,保证满足row>=1和column>=1。

输入样例

4  5
1 0 0 0 5
0 2 0 0 0
0 0 3 0 0
0 0 0 4 0
5  5
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 8 9
5 6 7 8 9

输出样例

        26        32        38        44        504         6         8        10        129        12        15        18        2116        20        24        32        36

代码

#include <iostream>
#include <iomanip>
using namespace std;
class matrix{
private:int row,column;int **mat;
public:matrix(const matrix& mx){this->row=mx.row;this->column=mx.column;this->mat=new int*[row];for (int i = 0; i <row ; ++i) {this->mat[i]=new int[column];for (int j = 0; j <column ; ++j) {this->mat[i][j]=mx.mat[i][j];}}}matrix(int r,int c){row=r;column=c;mat=new int*[row];for (int i = 0; i <row ; ++i) {mat[i]=new int[column];for (int j = 0; j <column ; ++j) {mat[i][j]=0;}}}~matrix(){for (int i = 0; i <row ; ++i) {delete []mat[i];}delete []mat;}void read(){for (int j = 0; j <row ; ++j) {for (int i = 0; i <column ; ++i) {cin>>mat[j][i];}}}matrix operator*(matrix& mt){if(this->row==1&&this->column==1){for (int i = 0; i < mt.row; ++i) {for (int j = 0; j <mt.column ; ++j) {mt.mat[i][j]=this->mat[0][0]*mt.mat[i][j];}}return mt;}else{matrix rs(this->row,mt.column);for (int i = 0; i < this->row; ++i) {for (int j = 0; j <mt.column ; ++j) {for (int k = 0; k <mt.row ; ++k) {rs.mat[i][j]+=this->mat[i][k]*mt.mat[k][j];}}}return rs;}}void display(){for (int i = 0; i <row ; ++i) {for (int j = 0; j <column ; ++j) {cout<<setw(10)<<mat[i][j];}cout<<endl;}}
};
int main()
{int r,c;cin>>r>>c;matrix m1(r,c);m1.read();int r1,c1;cin>>r1>>c1;matrix m2(r1,c1);m2.read();if(c==r1||r==1&&c==1){matrix m3=m1*m2;m3.display();}else{cout<<"Invalid Matrix multiplication!";}return 0;
}
http://www.lryc.cn/news/218485.html

相关文章:

  • 4K Video Downloader Pro v4.28.0(视频下载器)
  • java pdf,word,ppt转图片
  • map set
  • Fourier分析导论——第3章——Fourier级数的收敛性(E.M. Stein R. Shakarchi)
  • 解决ruoyi-vue部署到域名子路径静态资源404
  • 游戏引擎中为什么要用四元数表示旋转而不用欧拉角旋转?
  • E-Office(泛微OA)前台任意文件读取漏洞复现
  • 前端小案例 | 喵喵大王立大功 | 一个带便利贴功能的todolist面板
  • 算法训练营第十一天 | 20. 有效的括号、 1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值
  • Python unittest单元测试框架 TestSuite测试套件
  • FSB逮捕为乌克兰网络部队工作的俄罗斯黑客
  • 【PC电脑windows-学习样例tusb_serial_device-ESP32的USB模拟串口程序+VScode建立工程+usb组件添加+-基础样例学习】
  • LeetCode75——Day26
  • 面试算法53:二叉搜索树的下一个节点
  • 2023SHCTF web方向wp
  • 从物理磁盘到数据库 —— 存储IO链路访问图
  • 基于java+springboot+vue在线选课系统
  • GO学习之 同步操作sync包
  • NUUO网络摄像头(NVR)RCE漏洞复现
  • 一款快速获取目标网站关键信息的工具
  • 将GC编程语言引入WebAssembly的新方法
  • 微信小程序UI自动化测试实践:Minium+PageObject
  • Java零基础入门-输入与输出
  • iOS报错命名空间“std”中的“unary_function”
  • Flink SQL 窗口聚合详解
  • 中间件redis的使用
  • Why delete[] array when deepcopying with “=“?
  • curl(六)DNS解析、认证、代理
  • (免费领源码)PHP#MySQL高校学生信息管理系统28099-计算机毕业设计项目选题推荐
  • [动态规划] (四) LeetCode 91.解码方法