C++中統計陣列中滿足i*arr[i] > j*arr[j]的數對


給定一個數字陣列,目標是找到陣列中滿足以下條件的元素對:

如果 (i*arr[i] > j*arr[j]),則 (arr[i],arr[j]) 是一個有效的數對。

如果陣列是 [ 5,4,3,2,1 ],則數對將是 [3,1] 和 [2,1]。

讓我們透過例子來理解。

輸入 − arr[] = [ 1,5,4,1,2,8,3 ]

輸出 − 滿足條件 i*arr[i] > j*arr[j] 的數對數量為 − 3

解釋 − 數對為 (5,1), (4,1), (8,3)

輸入 − arr[] = [ -1,-2,3,4,5,6 ]

輸出 − 滿足條件 i*arr[i] > j*arr[j] 的數對數量為 − 1

解釋 − 數對為 (-1,-2)

下面程式中使用的方法如下:

我們將使用巢狀for迴圈遍歷從1到N。對於每個i和arr[i],搜尋滿足條件i*arr[i]>j*arr[j] (且i!=j)的j和arr[j]。如果條件為真,則遞增計數器。

  • 取一個整數陣列。

  • 函式condition_pair(int arr[], int size)接收陣列及其大小,並返回滿足條件的數對的數量。

  • 將初始計數設定為0。

  • 從i=1遍歷到i < size-1

  • 從j=i+1遍歷到j<size。

  • 如果 (i*arr[i]) > (j*arr[j]) 為真。遞增計數器。

  • 對於每個i和j,計算temp= (i*j)%(i+j)。

  • 兩次迭代結束後,計數器將包含此類數對的總數。

  • 返回計數器作為結果。

示例

 線上演示

#include <iostream>
using namespace std;
int condition_pair(int arr[], int size){
   int count = 0;
   for (int i = 0; i < size - 1; i++){
      for (int j = i + 1; j < size; j++){
         if(i*arr[i] > j*arr[j]){
            count++;
         }
      }
   }
   return count;
}
int main(){
   int arr[] = { 2, 4, 1, 9, 6 };
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Count of pairs in an array that hold i*arr[i] > j*arr[j] are: "<<condition_pair(arr, size);
   return 0;
}

輸出

如果我們執行上面的程式碼,它將生成以下輸出:

Count of pairs in an array that hold i*arr[i] > j*arr[j] are: 2

更新於:2020年12月2日

151 次檢視

啟動你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.