1 条题解

  • 0
    @ 2025-4-12 21:50:59

    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;
    }
    
    
    • 1

    信息

    ID
    1875
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者