在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