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

  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

append.cc,

[Submit][Status][Web Board]

HOME
Back


-->

???<中文?????English???All Copyright Reserved 2010-2011SDUSTOJTEAMGPL2.02003-2011HUSTOJ ProjectTEAM
Anything about the Problems, Please Contact Admin:
admin

#include<iostream>
#define MAX 102
using namespace std;
class Matrix
{
public:
    int r,c,error;
    int m[MAX][MAX];
    Matrix():error(0) {}
    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=1;
            return tmp;
        }
        for(int i=0; i<r; i++)
            for(int j=0; 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=0;i<tmp.r;i++)
            for(int j=0;j<tmp.c;j++)
            tmp.m[i][j]=0;
        if(c!=M.r)
        {
            tmp.error=1;
            return tmp;
        }
        for(int i=0; i<r; i++)
        {
            for(int j=0; j<M.c; j++)
            {
                int sum = 0;
                for(int k=0; 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=0; i<M.r; i++)
        for(int j=0; j<M.c; j++)
        {
            is>>M.m[i][j];
        }
    return is;
}
ostream &operator<<(ostream &os,Matrix &M)
{
    if(M.error==1)
    {
        os<<"Error"<<endl;
        return os;
    }
    for(int i=0; i<M.r; i++)
        for(int j=0; j<M.c; j++)
        {
            if(j!=M.c-1)
                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 = 0; i < cases; i++)
    {
        Matrix A, B, C, D;
        cin>>A>>B;
        C = A + B;
        D = A * B;
        cout<<"Case "<<i + 1<<":"<<endl;
        cout<<C<<endl;
        cout<<D;
    }
    return 0;
}
时间: 2024-10-08 22:17:46

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

Problem G 宝石合成 (内蒙古14年省赛)

1117: Problem G 宝石合成 时间限制: 1 Sec  内存限制: 128 MB 提交: 18  解决: 4 [提交][状态][讨论版] 题目描述 故事人物:豆豆强 走上致富之路的豆豆强越来越有土豪范,买房买车已经提不起他的兴趣,现在玩起了魔法宝石. 这种宝石分为不同品质等级,并且3个品质等级为 i 的宝石,可以合成一个品质等级为 i+1 的宝石.更加神奇的是,不管这个宝石的品质怎么变,一个宝石永远只占一个单位的空间. 现在豆豆强需要买一个全金打造的保险柜来储存这些宝石.本来对于他这

Cisco PT模拟实验(12) 路由器静态路由的配置

Cisco PT模拟实验(12) 路由器静态路由的配置 实验目的: 掌握静态路由的配置方法和应用 掌握路由选择表中的路由描述 熟悉路由选择和分组转发的原理及过程 实验背景: 某公司除总部外,另有一处分部,并且都有一个独立的局域网,为了使公司各部之间能相互通信,共享资源.每个出口利用一台路由器进行连接,两台路由器间公司申请了一条DDN专线(数字数据网)进行相连,要求做适当配置实现相互访问. 技术原理: 路由器属于网络层设备,能够根据IP数据报的首部信息,选择一条最佳路径(这一过程称为"路由选择&q

2018 Multi-University Training Contest 3 1007 / hdu6325 Problem G. Interstellar Travel 凸包

Problem G. Interstellar Travel 题意: 给定平面上n个点,起点1 为(0,0),终点 n 为(Xn, 0),其它点的横坐标 0 <Xi<Xn,纵坐标 Xi >=0.每次可以飞到一个横坐标严格更大的点,代价为两个坐标的叉积.求起点到终点总代价最小的飞行路线,并输出字典序最小的路线.2≤n≤200000. Shortest judge solution: 979 bytes 题解: 显然坐标相同的点里只保留编号最小的点最优. 将起点到终点的路径补全为终点往下走到

实验12:Problem A: 你会定义类吗?

Home Web Board ProblemSet Standing Status Statistics Problem A: 你会定义类吗? Problem A: 你会定义类吗? Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 556  Solved: 464[Submit][Status][Web Board] Description 定义一个类Demo,有构造函数.析构函数和成员函数show(),其中show()根据样例的格式输出具体属性值.该

实验12:Problem J: 动物爱好者

#define null ""是用来将字符串清空的 #define none -1是用来当不存在这种动物时,返回-1. 其实这种做法有点多余,不过好理解一些. Home Web Board ProblemSet Standing Status Statistics Problem J: 动物爱好者 Problem J: 动物爱好者 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 509  Solved: 376[Submit][Status

实验12:Problem D: 判断两个圆之间的关系

Home Web Board ProblemSet Standing Status Statistics Problem D: 判断两个圆之间的关系 Problem D: 判断两个圆之间的关系 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 381  Solved: 325[Submit][Status][Web Board] Description 定义Point类,包括double类型的两个属性,分别表示二维空间中一个点的横纵坐标:定义其必要的构

实验12:Problem B: 图形计数与求面积

注意构造函数中的数据类型是double类型,如果定义成int会出错,而且一旦出错很不容易发现这个错误 Home Web Board ProblemSet Standing Status Statistics Problem B: 图形计数与求面积 Problem B: 图形计数与求面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 563  Solved: 360[Submit][Status][Web Board] Description 定义三

实验12:Problem I: 成绩排序

Home Web Board ProblemSet Standing Status Statistics Problem I: 成绩排序 Problem I: 成绩排序 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 490  Solved: 403[Submit][Status][Web Board] Description 定义Student类: 1. 数据成员string name和int score表示一个学生的姓名.成绩. 2. 无参构造函

实验12:Problem H: 整型数组运算符重载

Home Web Board ProblemSet Standing Status Statistics Problem H: 整型数组运算符重载 Problem H: 整型数组运算符重载 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 643  Solved: 401[Submit][Status][Web Board] Description 定义Array类: 1.拥有数据成员int length和int *mems,分别是数组中元素的个数和元