1. 这个题目主要是乘法运算符的重载,卡了我好久,矩阵的乘法用3个嵌套的for循环进行,要分清楚矩阵的乘法结果是第一个矩阵的行,第二个矩阵的列所组成的矩阵。
  2. 重载+,*运算符时,可以在参数列表中传两个矩阵引用,分别表示前后进行运算的矩阵,或者是只传运算符之后的矩阵引用,前一个矩阵用的是隐含的this指针指向的矩阵。我用的是后者。
Home Web Board ProblemSet Standing Status Statistics
 

Problem G: 强悍的矩阵运算来了

Problem G: 强悍的矩阵运算来了

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 171  Solved: 98
[Submit][Status][Web Board]

Description

定义一个Matrix类,用于存储一个矩阵。重载其+、*运算符,分别用于计算两个矩阵的和、乘积;重载其<<和>>运算符,用于输出和输入一个矩阵。要求当两个矩阵不能进行加法或乘法运算时,应该输出Error。

Input

输入第1行N>0,表示有N组测试用例,共2N个矩阵。

每组测试用例包括2个矩阵。每个矩阵首先输入行数、列数,之后是该矩阵的所有元素。

Output

每个测试用例产生一组输出。具体格式见样例。注意:当不能进行加法或乘法运算时,应输出Error。

Sample Input

3
2 2
1 1
1 1
2 2
2 2
2 2
1 1
1
1 2
2 2
1 1
1
2 2
2 2
2 2

Sample Output

Case 1:
3 3
3 3

4 4
4 4
Case 2:
Error

2 2
Case 3:
Error

Error

HINT

 

Append Code

[Submit][Status][Web Board]

#include<iostream>
#define MAX 102
using namespace std;
class Matrix
{
public:
int r,c,error;
int m[MAX][MAX];
Matrix():error() {}
Matrix operator+(const Matrix &M)
{
Matrix tmp;
tmp.r=M.r;
tmp.c=M.c;
/*for(int i=0;i<tmp.r;i++)
for(int j=0;j<tmp.c;j++)
tmp.m[i][j]=0;*/
if(r!=M.r||c!=M.c)
{
tmp.error=;
return tmp;
}
for(int i=; i<r; i++)
for(int j=; j<c; j++)
{
tmp.m[i][j]=m[i][j]+M.m[i][j];
}
return tmp;
}
Matrix operator*(const Matrix &M)
{
Matrix tmp;
tmp.r=r;
tmp.c=M.c;
for(int i=;i<tmp.r;i++)
for(int j=;j<tmp.c;j++)
tmp.m[i][j]=;
if(c!=M.r)
{
tmp.error=;
return tmp;
}
for(int i=; i<r; i++)
{
for(int j=; j<M.c; j++)
{
int sum = ;
for(int k=; k<M.r; k++)
{
sum += m[i][k] * M.m[k][j];
}
tmp.m[i][j] = sum;
}
}
return tmp;
}
friend istream &operator>>(istream &is,Matrix &M);
friend ostream &operator<<(ostream &os,Matrix &M); };
istream &operator>>(istream &is,Matrix &M)
{
is>>M.r>>M.c;
for(int i=; i<M.r; i++)
for(int j=; j<M.c; j++)
{
is>>M.m[i][j];
}
return is;
}
ostream &operator<<(ostream &os,Matrix &M)
{
if(M.error==)
{
os<<"Error"<<endl;
return os;
}
for(int i=; i<M.r; i++)
for(int j=; j<M.c; j++)
{
if(j!=M.c-)
os<<M.m[i][j]<<" ";
else
os<<M.m[i][j]<<endl;
}
///os<<endl;
return os;
}
int main()
{
int cases, i;
cin>>cases;
for (i = ; i < cases; i++)
{
Matrix A, B, C, D;
cin>>A>>B;
C = A + B;
D = A * B;
cout<<"Case "<<i + <<":"<<endl;
cout<<C<<endl;
cout<<D;
}
return ;
}

实验12:Problem G: 强悍的矩阵运算来了的更多相关文章

  1. 实验9:Problem G: 克隆人来了!

    想要输出""的话: cout<<"A person whose name is \""<<name<<" ...

  2. 烟大 Contest1024 - 《挑战编程》第一章:入门 Problem G: Check The Check(模拟国际象棋)

    Problem G: Check The Check Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 10  Solved: 3[Submit][Statu ...

  3. The Ninth Hunan Collegiate Programming Contest (2013) Problem G

    Problem G Good Teacher I want to be a good teacher, so at least I need to remember all the student n ...

  4. 【贪心+中位数】【新生赛3 1007题】 Problem G (K)

    Problem G Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Sub ...

  5. Problem G: If We Were a Child Again

    Problem G: If We Were a Child AgainTime Limit: 1 Sec Memory Limit: 128 MBSubmit: 18 Solved: 14[Submi ...

  6. Problem G: Keywords Search

    Problem G: Keywords SearchTime Limit: 1 Sec Memory Limit: 128 MBSubmit: 10 Solved: 6[Submit][Status] ...

  7. BZOJ4977 八月月赛 Problem G 跳伞求生 set 贪心

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4977 - 八月月赛 Problem G 题意 小明组建了一支由n名玩家组成的战队,编号依次为1到n ...

  8. Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem G. k-palindrome dp

    Problem G. k-palindrome 题目连接: http://opentrains.snarknews.info/~ejudge/team.cgi?SID=c75360ed7f2c7022 ...

  9. ZOJ 4010 Neighboring Characters(ZOJ Monthly, March 2018 Problem G,字符串匹配)

    题目链接  ZOJ Monthly, March 2018 Problem G 题意  给定一个字符串.现在求一个下标范围$[0, n - 1]$的$01$序列$f$.$f[x] = 1$表示存在一种 ...

随机推荐

  1. HttpRequest重写,解决资源战胜/链接超时/分块下载事件通知 问题。

    /************************************************************************************** 文 件 名: WebRe ...

  2. 【原创】14. MYSQL++之SSQLS(原理解析)

    从之前所介绍的SSQLS的介绍中我们可以感受到,SSQLS的精髓应该在sql_create_#这个宏,他所创建出来的这个结构体将会是突破的关键,所以我将会从以下顺序入手. 1. sql_create_ ...

  3. com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte

    com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte ...

  4. DDD:谈谈数据模型、领域模型、视图模型和命令模型

    背景 一个类型可以充当多个角色,这个角色可以是显式的(实现了某个接口或基类),也可以是隐式的(承担的具体职责和上下文决定),本文就讨论四个角色:数据模型.领域模型.视图模型和命令模型. 四个角色 数据 ...

  5. Unity 3D Intantiate过程中Transform 空物体和本体之间的关系

    想当年刚学Unity的时候,这个问题困扰了我好几天,因此来分享一下当初解决问题的思路. 我们通过Unity构建场景的过程中,经常发现一个现象,就是物体在拖进场景中后,我们会发现物体是反的,通过改变物体 ...

  6. [git]fork+pull提交模式

    fork+pull提交模式 在公司项目中,大多都是通过"主题分支"的方式,进行开发与合并代码.但是,这样又一个弊端就是:合并代码后需要删除分支.同时,如果是开源的项目的话,非项目中 ...

  7. 使用自带的JavaScriptSerializer序列化实体 指定的属性如何不序列化

    public class GridConfig { public string width = "100%"; public string source = "dataA ...

  8. 专题——web.xml 中 url-pattern

    一.映射什么? 一个请求发送到 servlet 容器,servlet 容器会将当前请求的 url 路径减去 协议.端口号.contextPath,剩下 servletPath 就是用来做 url-pa ...

  9. C#设计模式——命令模式(Command Pattern)

    一.概述通常来说,“行为请求者”与“行为实现者”是紧耦合的.但在某些场合,比如要对行为进行“记录.撤销/重做.事务”等处理,这种无法抵御变化的紧耦合是不合适的.在这些情况下,将“行为请求者”与“行为实 ...

  10. background的属性和背景图片定位的实例

    本文内容: 1.背景图片定位示例 2.background常用的属性值 3.background-repeat新增的round.space属性 4.background-size的属性值(着重介绍co ...