在 C++ 中計算選擇一對具有最大差值的組合方式


給定一個數字陣列 Arr[]。目標是計算差值等於所有可能的配對中的最大差值的配對數。計算配對(i!=j)且 arr[x]- arr[y] 為最大可能值。

我們將首先找到最大差值,其中 (i!=j)。並將其儲存為 maxdiff。然後計算所有差值=maxdiff 的配對。

讓我們透過示例來理解。

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

輸出 − 選擇一對具有最大差值的組合方式數 - 2

解釋

Here minimum no. is 1 and maximum number is 5, maximum difference =5-1=4
Pair 1 [ 1,2,3,2,4,1,5 ] → (1,5) difference=4
Pair 2 [ 1,2,3,2,4,1,5 ] → (1,5) difference=4
Number of pairs with difference which is maximum=2.

輸入 − arr[]= { 2,4,2,4 }

輸出 − 選擇一對具有最大差值的組合方式數 - 4

解釋

Here minimum no. is 2 and maximum number is 4, maximum difference =4-2=2
Pair 1 [ 2,4,2,4 ] → (2,4) difference=2
Pair 2 [ 2,4,2,4 ] → (2,4) difference=2
Pair 3 [ 2,4,2,4 ] → (4,2) difference=2
Pair 4 [ 2,4,2,4 ] → (2,4) difference=2
Number of pairs with difference which is maximum=4.

下面程式中使用的方案如下

  • 我們使用一個用隨機數初始化的整數陣列 Arr[]。

  • 使用一個變數 N 來儲存 Arr[] 的長度。

  • 函式 countPairs(int arr[],int n) 以陣列及其長度作為輸入,並返回選擇差值等於最大差值的配對的組合方式數。

  • 將初始變數 count 設定為 0,表示組合方式數。

  • 將變數 diff 作為每對的差值。

  • 將變數 maxdiff 作為所有配對的最大差值。

  • 從陣列中找到最大值和最小值,分別儲存在 maxx 和 mini 中

  • 現在 maxdiff 將為 maxx-mini。

  • 使用兩個 for 迴圈遍歷陣列,用於每對的每個元素。

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

  • 計算 diff=arr[i]-arr[j] 或 arr[j]-arr[i] 作為單獨計數。如果 diff==maxdiff,則遞增 count,因為這對具有最大差值。

  • 在所有迴圈結束時,count 將包含滿足條件的配對的總數。

  • 返回 count 作為結果。

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
int countWays(int arr[],int n){
   int count = 0;
   int diff;
   int maxdiff=0; //making minimum as larger than any product in array
   int mini,maxx;
   mini=maxx=arr[0];
   for (int i = 0; i < n; i++) //find minimum and maximum values{
      if(arr[i]<mini)
         {mini=arr[i];}
      if(arr[i]>maxx)
         { maxx=arr[i]; }
   }
   maxdiff=maxx-mini; //this is maximum difference
   //cout<<maxx<<" "<<mini;
   for (int i = 0; i < n-1; i++){
      for (int j = i+1; j < n; j++){
         diff=arr[i]-arr[j]; //pair 1
         if ( diff==maxdiff ){
            count++;
            //cout<<endl<<"a :"<<arr[i]<<" b :"<<arr[j]; //to print
         }
         diff=arr[j]-arr[i]; //pair 2
         if ( diff==maxdiff ){
            count++;
            //cout<<endl<<"a :"<<arr[i]<<" b :"<<arr[j]; //to print
         }
      }
   }
   return count;
}
int main(){
   int Arr[]={ 3, 2, 1, 1, 3 };
   int N=5; //length of array
   cout <<endl<< "No. of ways of choosing pair with maximum difference : "<<countWays(Arr,N);
   return 0;
}

輸出

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

No. of ways of choosing pair with maximum difference : 4

更新於: 2020-08-29

261 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.