定義一個Matrix類,用於存儲一個矩陣。重載其+、*運算符,分別用於計算兩個矩陣的和、乘積;重載其<<和>>運算符,用於輸出和輸入一個矩陣。要求當兩個矩陣不能進行加法或乘法運算時,應該輸出Error。
輸入第1行N>0,表示有N組測試用例,共2N個矩陣。
每組測試用例包括2個矩陣。每個矩陣首先輸入行數、列數,之後是該矩陣的所有元素。
每個測試用例產生一組輸出。具體格式見樣例。注意:當不能進行加法或乘法運算時,應輸出Error。
한국어<
中文
فارسی
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; }