使用 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
廣告