计算C ++中列总和大于行总和的对数

给定一个大小为NXN的矩阵。目的是找到所有有效索引对(i,j)的计数,以使第j列的和元素大于第i行的和。

我们将通过遍历矩阵并计算每一行和每一列的元素之和来完成此操作。

将每个元素的和存储在rowum [N]中,将每个列的元素存储在colsum [N]中。

现在,制作成对的rowum [i]和colsum [j],并检查colsum [j]> rowsum [i]。如果为true,则对此类对计数。

让我们通过示例来理解。

Input-: matrix= {
   { 1,2,0,1},
   { 3,3,0,2},
   { 1,3,0,2},
   { 3,0,0,2} 
};

输出-有效对数-9

说明-

Rowsum[0]= 1+2+0+1=5 Colsum[0]= 1+3+1+3=8
Rowsum[1]=3+3+0+2=8 Colsum[1]= 2+3+3+0=8
Rowsum[2]= 1+3+0+2=6 Colsum[2]= 0+0+0+0=0
Rowsum[3]=3+0+0+2=5 Colsum[3]= 1+2+2+2=7
Pairs of (i,j) such that rowsum[i] < colsum[j].
(0,0), (0,1), (0,3), (2,0), (2,1), (2,3), (3,0) (3,1), (3,3)

输入-

Arr[]= { {1,1,1}, {1,1,1}, {1,1,1} } N=3

输出-有效对数-0

说明-

Rowsum[0]= 1+1+1=3 Colsum[0]= 1+1+1=3
Rowsum[1]= 1+1+1=3 Colsum[1]= 1+1+1=3
Rowsum[2]= 1+1+1=3 Colsum[2]= 1+1+1=3
No pairs possible where rowsum[i]<colsum[j]

以下程序中使用的方法如下

  • 我们采用用随机数初始化的整数数组Arr []。

  • 取一个变量n,它存储Arr []的长度。

  • 函数countPairs(int arr [],int n)接受一个数组,将其长度作为输入并返回有效且满足所需条件的对。

  • 我们采用两个数组rowum [n]和colsum [n]。

  • 遍历矩阵并将arr [i] [j]添加到rowum [i]和colsum [j]以计算第i行和第j列的和。

  • 现在,使用两个for循环遍历数组colsum []和rowsum []。

  • 如果有colsum [j]> rowsum [i]。增量计数。

  • 返回计数结果。

示例

#include <bits/stdc++.h>
using namespace std;
int countPairs(int arr[][3], int n){
   //配对数
   int count = 0;
   int rowsum[n]={0};
   int colsum[n]={0};
   int i,j;
   for (i = 0; i < n; i++){
      for (j = 0; j < n; j++){
         rowsum[i]+=arr[i][j];
         colsum[j]+=arr[i][j];
      }
   }
   for(i=0;i<n;i++){
      for(j=0;j<n;j++)
         if(colsum[j]>rowsum[i])
            { count++; }
   }
   return count;
}
int main(){
   int Arr[][3] = { {1,3,5},{2,4,6},{3,5,7} };
   int side=3;
   cout <<endl<<"Count of number of pairs : "<< countPairs(Arr, side);
   return 0;
}

输出结果

如果我们运行上面的代码,它将生成以下输出-

Count of number of pairs : 4