使用 C++ 統計列和大於行和的配對數量


給定一個 NXN 大小的矩陣。目標是找到所有有效索引對 (i,j) 的數量,使得列 j 的元素之和大於行 i 的元素之和。

我們將透過遍歷矩陣並計算每一行和每一列的元素之和來實現這一點。

將每一行的元素之和儲存在 rowsum[N] 中,將每一列的元素之和儲存在 colsum[N] 中。

現在將 rowsum[i] 和 colsum[j] 配對,並檢查 colsum[j] > rowsum[i] 是否成立。如果成立,則為這樣的配對增加計數。

讓我們透過示例來理解。

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) 以陣列及其長度作為輸入,並返回滿足所需條件的有效配對。

  • 我們使用兩個陣列 rowsum[n] 和 colsum[n]。

  • 遍歷矩陣並將 arr[i][j] 加到 rowsum[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){
   // Count of pairs
   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

更新於:2020-08-29

130 次檢視

啟動你的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.