1550 - A+B for Matrices

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

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.

<span style="font-size:12.0pt;font-family:&quot;color:#333333;background:white;">&nbsp;&nbsp;&nbsp; The input is terminated by a zero M and that case must NOT be processed.</span> 

<br />

题目输出

    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

C语言解答

#include <stdio.h>
int main()
{
  while(1)
  {
    int m,n;
    scanf("%d",&m);
    if(m==0)
    {
      break;
    }
    scanf("%d",&n);
    int A[20][20];
    int B[20][20];
    for(int i=0;i<m;i++)
    {
      for(int j=0;j<n;j++)
      {
        scanf("%d",&A[i][j]);
      }
    }
    for(int i=0;i<m;i++)
    {
      for(int j=0;j<n;j++)
      {
        scanf("%d",&B[i][j]);
      }
    }
    int count=0;
    int flag=0;
    for(int i=0;i<m;i++)
    {
      flag=0;
      for(int j=0;j<n;j++)
      {
        if(A[i][j]+B[i][j]!=0)
        {
          flag=1;
          break;
        }
      }
      if(flag==0)
      {
        count++;
      }
    }
    for(int i=0;i<n;i++)
    {
      flag=0;
      for(int j=0;j<m;j++)
      {
        if(A[j][i]+B[j][i]!=0)
        {
          flag=1;
          break;
        }
      }
      if(flag==0)
      {
        count++;
      }
    }
    printf("%d\n",count);
    
  }
}

C++解答

#include <stdio.h>

// 定义三个矩阵,分别存储将要输入的两个矩阵以及两个矩阵的和
int a[11][11];
int b[11][11];
int c[11][11];

/*
 * 将矩阵 a 和矩阵 b 相加
 * 传入的是矩阵的行数 m 以及列数 n
 * 将矩阵 a 和矩阵 b 的结果存储在矩阵 c 中
 */
void addM(int m,int n){
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            c[i][j] = a[i][j] + b[i][j];
        }
    }
}

/*
 * 获得答案:遍历查看有多少零行和零列
 */
int getAns(int m, int n){
    int ans = 0;
    for(int i=0;i<m;i++){	// 先遍历零行
        int j=0;
        for(j=0;j<n;j++){	// 每行中从第一列开始
            if(c[i][j]){
                break;
            }
        }
        if(j == n){			// 如果整行遍历完了没有发现非零值,则这一行是零行
            ans ++;			// 这样的话结果增加 1
        }
    }

    for(int i=0;i<n;i++){	// 然后遍历列,方法与遍历行是一样的
        int j=0;
        for(j=0;j<m;j++){
            if((c[j][i])){
                break;
            }
        }
        if(j == m){
            ans ++;
        }
    }

    return ans;		// 返回遍历的结果
}

int main(){

    int m, n;
    while(scanf("%d", &m), m){		// 读入行数,如果某次行数为0,则说明输入结束了
        scanf("%d", &n);
        for(int i=0;i<m;i++){		// 读入第一个矩阵的数据
            for(int j=0;j<n;j++){
                scanf("%d",&a[i][j]);
            }
        }
        for(int i=0;i<m;i++){		// 读入第二个矩阵的数据
            for(int j=0;j<n;j++){
                scanf("%d",&b[i][j]);
            }
        }
        addM(m,n);					// 求两个矩阵的和
        printf("%d\n",getAns(m,n));	// 输出结果
    }

    return 0;
}