使用 C++ 統計滿足 arr[i] * arr[j] > arr[i] + arr[j] 的 (i, j) 對數


給定一個包含 n 個正數的陣列。目標是統計滿足 arr[i]*arr[j] > arr[i]+arr[j] 的有序對 (i,j) 的數量,其中 0<=i<j<n,n 為陣列元素個數。

我們將使用兩個 for 迴圈遍歷陣列以計算每一對數。現在計算 arr[i] 和 arr[j] 的乘積和和。如果乘積大於和,則計數器加一。

讓我們透過示例來理解。

輸入 − Arr[]= { 1,1,2,3 } N=4

輸出 − 對數 − 1

解釋 − 唯一有效的對是 − (2,3)

2*3=6 > 2+3=5

輸入 − Arr[]= { 2,2,2 } N=3

輸出 − 對數 − 0

解釋 − 2*2 和 2+2 都等於 4。沒有乘積大於和的數對。

下面程式中使用的演算法如下

  • 我們使用一個用正數初始化的整型陣列 arr[]。

  • 使用變數 n 儲存 Arr[] 的長度。

  • 函式 countPairs(int arr[], int n) 以陣列及其長度作為輸入,並列印乘積大於和的數對的數量。

  • 使用兩個 for 迴圈遍歷每一對元素。

  • 外迴圈從 0<=i<n-1,內迴圈 i<j<n

  • 檢查 arr[i]*arr[j]>arr[i]+arr[j] 是否成立。如果成立,則計數器加一。

  • 所有迴圈結束後,count 將包含乘積大於和的數對的總數。

  • 返回 count 作為結果。

示例

 線上演示

#include <bits/stdc++.h>
#include <math.h>
using namespace std;
int countPairs(int arr[], int n){
   int count=0;
   int sum=0;
   for(int i=0;i<n-1;i++){
      for(int j=i+1;j<n;j++){
         if(arr[i]*arr[j]>arr[i]+arr[j]) //condition
            { count++; }
      }
   }
   return count;
}
int main(){
   int arr[] = { 1,2,3,2 };
   int len = sizeof(arr) / sizeof(int);
   cout<<"Count of number of pairs :"<<countPairs(arr, len);
   return 0;
}

輸出

如果執行上述程式碼,將生成以下輸出:

Count of number of pairs :2

更新於: 2020年8月29日

614 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告