C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で最大の違いを持つペアを選択する方法を数えます


数字の配列Arr[]が与えられます。目標は、可能なすべてのペアの最大差に等しい差を持つペアの数を数えることです。カウントペア(i!=j)とarr[x]-arr[y]は可能な限り最大です。

これを行うには、最初に(i!=j)の最大差を見つけます。そして、maxdiffとして保存します。次に、difference=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[]を使用します。

  • Arr[]の長さを格納する変数Nを取ります。

  • 関数countPairs(int arr []、int n)は配列を受け取り、その長さを入力として受け取り、差が最大差に等しいペアを選択する方法を返します。

  • ウェイの数として、初期変数カウントを0とします。

  • 変数diffを各ペアの差として取ります。

  • maxdiff変数をすべてのペアの最大差として取ります。

  • 配列から最大値と最小値を見つけて、それぞれmaxxとminiに格納します

  • これで、maxdiffはmaxx-miniになります。

  • ペアの要素ごとに2つのforループを使用して配列をトラバースします。

  • 0 <=i

  • diff =arr [i]-arr[j]またはarr[j]-arr[i]カウントを個別に計算します。このペアには最大の差があるため、diff==maxdiffインクリメントカウントの場合。

  • すべてのループの終わりに、カウントには、条件を満たすペアの総数が含まれます。

  • 結果としてカウントを返します。

#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

  1. C++の整数の配列で最大の積を持つペアを見つけます

    配列Aがあるとすると、n個の異なる要素があります。 xとyの積が最大になるように、配列Aからペア(x、y)を見つける必要があります。配列には正または負の要素が含まれる場合があります。配列がA=[-1、-4、-3、0、2、-5]のようであるとすると、積が最大になるため、ペアは(-4、-5)になります。 この問題を解決するには、positive_max、positive_second_max、negative_max、negative_second_maxの4つの数値を追跡する必要があります。最後に、(positive_max *positive_second_max)が(negative_ma

  2. C++の配列で最大GCDのペアを検索します

    正の整数の配列があるとします。私たちのタスクは、GCD値が最大である配列から整数のペアを見つけることです。 A ={1、2、3、4、5}とすると、出力は2になります。ペア(2、4)にはGCD 2があり、他のGCD値は2未満です。 この問題を解決するために、各要素の除数の数を格納するためのカウント配列を維持します。除数を数えるプロセスには、O(sqrt(arr [i]))の時間がかかります。全体をトラバースした後、最後のインデックスから最初のインデックスまでカウント配列をトラバースできます。要素が1より大きい値が見つかった場合、これは2つの要素の約数であり、最大GCDでもあることを意味します。