程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 實驗12:Problem G: 強悍的矩陣運算來了,problem矩陣

實驗12:Problem G: 強悍的矩陣運算來了,problem矩陣

編輯:C++入門知識

實驗12:Problem G: 強悍的矩陣運算來了,problem矩陣


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]

한국어<   中文  فارسی  English  ไทย
All Copyright Reserved 2010-2011 SDUSTOJ TEAM
GPL2.0 2003-2011 HUSTOJ Project TEAM
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;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved