在 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
广告