Problem D: 强悍的矩阵运算来了
Problem D: 强悍的矩阵运算来了
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1817 Solved: 1160
[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,
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; }
#include <iostream> using namespace std; class Matrix { public : int rec[100][100]; int hang, lie; string error; Matrix():hang(0), lie(0), error("No"){} Matrix operator+(const Matrix &p) { Matrix temp; temp.hang=hang; temp.lie=lie; if(hang!=p.hang||lie!=p.lie) temp.error="Yes"; else temp.error="No"; int i, j; for(i=0; i<hang; i++) { for(j=0; j<lie; j++) temp.rec[i][j]=rec[i][j]+p.rec[i][j]; } return temp; } // 1 2 3 1 2 // 1 2 3 1 2 // 1 2 Matrix operator*(const Matrix &p) { Matrix temp; temp.hang=hang; temp.lie=p.lie; if(lie!=p.hang) temp.error="Yes"; else temp.error="No"; int i, j, k; for(i=0; i<hang; i++)//第一个矩阵行不变 { for(j=0; j<p.lie; j++)//第二个矩阵列不变 { int sum=0; //第一个矩阵的列等于第二个矩阵的行 for(k=0; k<p.hang; k++) { sum+=rec[i][k]*p.rec[k][j]; } temp.rec[i][j]=sum; } } return temp; } friend istream &operator>>(istream &is, Matrix &p) { int x, y; cin>>x>>y; p.hang=x; p.lie=y; for(int i=0; i<p.hang; i++) { for(int j=0; j<p.lie; j++) { is>>p.rec[i][j]; } } return is; } friend ostream &operator<<(ostream &os, Matrix &p) { if(p.error=="Yes") { os<<"Error"<<endl; return os; } for(int i=0; i<p.hang; i++) { for(int j=0; j<p.lie; j++) { if(j==p.lie-1) os<<p.rec[i][j]<<endl; else os<<p.rec[i][j]<<" "; } } 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; }
作者:7oDo
仅供参考,请勿抄袭。
Hang Hang Hang !!!