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

C++の配列内の等しい要素を持つインデックスペアの数


N個の要素の配列が与えられます。目標は、i!=jのように同じ要素値を持つインデックスペア(i、j)を見つけることです。つまり、Arr [i] =Arr [j]およびi!=jです。これは、同じサイズの手袋のペアを作るために使用されます。 N個の手袋のうち、ペアの手袋のみが販売に役立ちます。

これを行うには、0 <=i 0 &&Arr [j]> 0であり、i!=jの場合、(i、j)の各ペアを比較します。 trueの場合、そのようなペアの数を増やし、これらの要素を-1(Arr [i] =Arr [j] =-1)にして、サイズ-1の手袋はないため、それ以上のチェックから除外します。

例を挙げて理解しましょう。

入力 − arr [] ={4,3,2,1,2,4} N =6

出力 −要素が等しいインデックスペアの数− 2

説明

count=0, Arr[]= [ 4,3,2,1,2,4 ]
Arr[0]=Arr[5], 0!=5, count=1 Arr[0]=Arr[5]=-1 → [ -1,3,2,1,2,-1 ]
Arr[2]=Arr[4], 2!=4, count=2 Arr[2]=Arr[4]=-1 → [ -1,3,-1,1,-1,-1 ]
Now array has no new pairs with equal values, i!=j and > -1. Total pairs=2

入力 − arr [] ={2,2,2,2,2} N =5

出力 −要素が等しいインデックスペアの数− 2

説明

count=0, Arr[]= [ 2,2,2,2,2 ]
Arr[0]=Arr[1], 0!=1, count=1 Arr[0]=Arr[1]=-1 → [ -1,-1,2,2,2 ]
Arr[2]=Arr[3], 2!=3, count=2 Arr[2]=Arr[3]=-1 → [ -1,-1,-1,-1,2 ]
Now array has no new pairs with equal values, i!=j and > -1. Total pairs=2

以下のプログラムで使用されているアプローチは次のとおりです

  • 手袋のサイズが0より大きい場合、乱数で初期化された整数配列Arr[]を使用します。

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

  • 関数countPairs(int arr []、int n)は、配列とその長さを入力として受け取り、サイズが等しくインデックスが異なるペアを返します。

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

  • 0 <=i

  • arr[i]とarr[j]が正であるかどうかを確認します。 arr [i] ==arr [j]の場合、カウントをインクリメントします。 (ループで設定された条件に従って、iがjと等しくなることはありません。比較する必要はありません)。

  • 次に、arr [i] =arr [j] =-1に設定して、以降の比較からそれらを削除します。

  • すべてのループの終わりに、カウントには手袋のペアの総数が含まれます。

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

// C++ implementation of above approach
#include <bits/stdc++.h>
using namespace std;
// Function to count equal elements to make pair of gloves
int countPairs(int arr[], int n){
   int count = 0;
   for(int i=0;i<n-1;i++){
      for(int j=i+1;j<n;j++){
         if(arr[i]==arr[j] && arr[i]>0 && arr[j]>0){
            count++;
            arr[i]=arr[j]=-1;
         }
      }
   }
   return count;
}
int main(){
   int arr[] = { 1,2,4,2,1,2,4 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout <<"Pair of gloves ( Equal element pairs ):"<<countPairs(arr, n);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Pair of gloves ( Equal element pairs ):3.

  1. C ++で合計が等しい、ソートされていない配列のすべてのペアを出力します

    この問題では、並べ替えられていない配列があり、この配列内で合計が等しいすべてのペアを出力する必要があります。 問題を理解するために例を見てみましょう- Input: array = [12, 13, 20, 5] Output: [12, 13] and [20, 5] have sum 25. この問題を解決するには、同じ合計のペアを見つける必要があります。このために、同じ合計のペアをチェックします。また、ペアの重複を避けるために、マップを使用します。 このために、2つのマップが必要になります。1つはすべての合計ペアとその合計を格納し、もう1つはすべての合計とそれに対応するペアを格納し

  2. C ++のプライム周波数を持つ配列要素?

    配列 同じデータ型の要素のコンテナです。 プライム周波数 配列の要素の出現回数が素数であることを意味します。 したがって、これらの定義に基づいて、プライム周波数を持つ配列要素を見つける問題があります。配列の文字列が与えられます。文字の頻度を見つけて、頻度が素数であるかどうかを確認してから、素数の頻度を持つ要素を数える必要があります。 例を見てみましょう Input: str = “helloworld” Output: 2 説明 文字の出現回数は- h -> 1 e -> 1 l -> 3 o -> 2 w-> 1 r ->