在C ++中以矩阵形式打印具有相同矩形和的单元格

在这个问题中,我们给出了一个矩阵整数值的大小MXN的。我们的任务是创建一个程序来打印矩阵中具有相同矩形和的单元格

问题描述: 我们将在矩阵中找到一个像元,以该像元开始和结束的子矩阵的总和等于所有其余元素的总和。 

对于一个单元,矩阵(a,b)子矩阵mat [0] [0]至mat [a] [b]和mat [a] [b]至mat [m] [n]之和等于所有剩余元素的总和。

让我们举个例子来了解这个问题, 

输入:  mat [] [] = {{5,0,2,7}
                             {3,0,1,0}
                             {1,4,1,3}
                             {10,0,2,1}}

输出: (2,1)

解释: 

对于元素(2,3)

子矩阵1为-{{5,0}
                             { 3,0 }
                             {1,4}}

Submatrix2是-{{4,1,3}
                             { 0,2,1 }}

总和= 5 + 0 + 3 + 0 + 1 + 4 + 1 + 3 + 0 + 2 + 1 = 20

其余元素的总和= 2 + 7 + 1 + 0 + 10 = 20

解决方法

为了解决该问题,我们需要创建2个辅助子矩阵aux1 [m] [n]和aux2 [m] [n]。aux1 [i] [j]将存储从(0,0)到(i,j)的所有元素的和,aux2 [i] [j]将存储从(i,j)到( n,m)。然后,我们将相加和相减mat(i,j),因为它将发生两次。

然后,我们将该总和与矩阵所有元素的总和进行比较。如果单元格上的总和是矩阵总和的一半。然后是单元格的结果,我们将其打印出来。

该程序说明了我们解决方案的工作原理,

示例

#include <iostream>

using namespace std;

#define R 4

#define C 4

void findCellWithSameRectSum(int mat[R][C]) {

   

   int m = R, n = C;

   int aux1[m][n], aux2[m][n];

   int matSum = 0;

   

   for (int i = 0; i < m; i++) {

      for (int j = 0; j < n; j++) {

         

         aux2[i][j] = aux1[i][j] = mat[i][j];

         matSum += mat[i][j];

         

      }

   }

   for (int i = 1; i < m; i++) {

     

      aux1[i][0] += aux1[i-1][0];

      aux2[m-i-1][n-1] += aux2[m-i][n-1];

   }

   for (int j = 1; j < n; j++) {

     

      aux1[0][j] += aux1[0][j-1];

      aux2[m-1][n-j-1] += aux2[m-1][n-j];

   }

   for (int i = 1; i < m; i++)

      for (int j = 1; j < n; j++) {

         

         aux1[i][j] += aux1[i-1][j] + aux1[i][j-1] - aux1[i-1][j-1];

         aux2[m-i-1][n-j-1] += aux2[m-i][n-j-1] + aux2[m-i-1][n-j] - aux2[m-i][n-j];

      }

   for (int i = 0; i < m; i++)

      for (int j = 0; j < n; j++)

         if (matSum == 2 * (aux1[i][j] + aux2[i][j] - mat[i][j]))

            cout << "(" << i << ", " << j << ")\t";

}

int main() {

   int mat[R][C] = {{5, 0, 2, 7},

                {3, 0, 1, 0},

                {1, 4, 1, 3},

                {10, 0, 2, 1}};

   cout<<"The cells with same rectangular sums in a matrix is \n";

   findCellWithSameRectSum(mat);

   return 0;

}

输出结果
The cells with same rectangular sums in a matrix is

(1, 1)           (2, 1)

以上是 在C ++中以矩阵形式打印具有相同矩形和的单元格 的全部内容, 来源链接: utcz.com/z/329742.html

回到顶部