问题传送门:<A+B for Matrices>
<span style="font-size:18px;">题目描述:
This time, you are supposed to find A+B where A and B are two matrices, and then count the number of zero rows and columns.
输入:
The input consists of several test cases, each starts with a pair of positive integers M and N (≤10) which are the number of rows and columns of the matrices, respectively. Then 2*M lines follow, each contains N integers in [-100, 100], separated by a space. The first M lines correspond to the elements of A and the second M lines to that of B.
The input is terminated by a zero M and that case must NOT be processed.
输出:
For each test case you should output in one line the total number of zero rows and columns of A+B.
样例输入:
2 2
1 1
1 1
-1 -1
10 9
2 3
1 2 3
4 5 6
-1 -2 -3
-4 -5 -6
0
样例输出:
1
5</span>
个人Code:
<span style="font-size:18px;">/*****************************************
# @Name: 1001-a-plus-b-matrix.cpp
# @Description: A simple sentence descript this file.
# @Mail:
# @Created Time: Sat 11 Oct 2014 10:32:09 AM CST
# @Version: V1.0
# @Announcement:
九度1001号题
实际上,可以m=n=1,然后仅含的该元素值是0,但是题目中却以0作为all instances的结束,可以将某个范围外的大数作为终止标志.
判断输入是否是整数(题中对数字大小进行了限定,所以不会有溢出问题)
在判断全0的行列总数时,应"遍历一遍行列式,若某个元素不为0,则不再遍历该元素所在的行和列,这样更高效。
比如以行序遍历,则若某列一直未被删除,便说明该列应是全0列。"
*****************************************/
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main(){
queue <int> counts; //使用队列存储统计的多个行列式的全0行列数
int m,n; //m,n分别代表行数、列数
cin >> m;
if (0==m) cout<<"The value of m is zero."<<endl;
while(0 != m){
cin >> n;
vector < vector <int> > amatrix(m, vector<int>(n));
//初始化矩阵a
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin >> amatrix[i][j] ;
}
}
//temp用以暂存矩阵b的数字,将矩阵b的元素直接加至矩阵a上,不保存矩阵b
int temp = 0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin >> temp;
amatrix[i][j] += temp ;
}
}
//count求和后的矩阵中全0行列总数
int count =0;
for (int i=0;i<m;i++){
int j = 0;
for (;j<n;j++){
if ( 0 == amatrix[i][j] ) continue;
else {
j = 0;
break;
}
}
if ( j == n) count += 1;
}
for (int j=0;j<n;j++){
int i = 0;
for (i=0;i<m;i++){
if ( 0 == amatrix[i][j] ) continue;
else {
i = 0;
break;
}
}
if ( i == m) count += 1;
}
counts.push(count);
cin >> m;
}//while
while (!counts.empty()){
cout << counts.front() << endl;
counts.pop();
}
return 0;
}
</span>