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

1つの頻度がC++で少なくとも他の値になるように、配列内のペアをカウントします


正の整数の配列が与えられます。目標は、ペアが要素(A、B)を持つようにarr []の要素のペアの数を見つけることです。ここで、Aの頻度はB倍で、Bの頻度はAです。

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

入力 − int arr [] ={3、3、3、5、5、6、6}

出力 − 1つの頻度が少なくとも他の値になるような配列内のペアの数は、− 1

説明 − AがB回発生し、BがA回発生するアレイ内の有効なペアは、3がアレイ内で3回発生するため、(3、3)です。したがって、有効なペアは1つしかないため、カウントは1です。

入力 − int arr [] ={3、3、3、3、3、5、5、5、6、6}

出力 − 1つの頻度が少なくとも他の値になるような配列内のペアの数は、− 1

説明 − AがB回発生し、BがA回発生するアレイ内の有効なペアは、3が5回発生し、5がアレイ内で3回発生するため、(3、3)、(5、5)、および(3、5)です。 。したがって、有効なペアは3つあるため、カウントは3になります。

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

このアプローチでは、最初に、配列の要素の頻度を含む順序付けされていないマップを作成してデータを入力します。 forループを使用してunordered_mapをトラバースします。各要素とその頻度について、さらに頻度が見つかった場合は、ペアの数を増やします。

  • 整数の配列arr[]を取ります。

  • 関数frequency_other_value(int arr []、int size)は、配列とそのサイズを取得し、ペアが(A、B)になるようにペアの数を返します。ここで、Aは少なくともB回発生し、その逆も同様です。

  • 初期カウントを0とします。

  • arr[]の要素とその頻度についてはunordered_mapumを取ります。

  • ペアstart=it.secondの最初の値ごとにforとforを使用してマップをトラバースします。 (it =イテレータ)、周波数のトラバースマップ>=forループの使用を開始します。

  • そのようなペアのインクリメントカウント。

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

#include <bits/stdc++.h>
using namespace std;
int frequency_other_value(int arr[], int len){
   int count = 0;
   unordered_map<int, int> um;
   for (int i = 0; i < len; ++i){
      um[arr[i]]++;
   }
   for (auto it : um){
      int start = it.first;
      int end = it.second;
      for (int j = 1; j <= end; j++){
         if (um[j] >= start){
            count++;
         }
      }
   }
   return count;
}
int main(){
   int arr[] = { 3, 3, 3, 5, 5, 6, 6};
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Count of pairs in an array such that frequency of one is at least value of other are: "<<frequency_other_value(arr, size);
   return 0;
}

出力

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

Count of pairs in an array such that frequency of one is at least value of other are: 1

  1. C ++を使用して、XORが0になるような配列内のペアの数を見つけます。

    n個の要素の配列があるとします。 XORが0になる配列内のペアの数を見つける必要があります。XORが0のペア(x​​、y)の場合、x=yです。これを解決するために、配列を並べ替えることができます。次に、2つの連続する要素が同じである場合は、カウントを増やします。すべての要素が同じである場合、最後のカウントはカウントされない場合があります。その場合、最後の要素と最初の要素が同じであるかどうかを確認し、同じである場合は、カウントを1つ増やします。 例 #include<iostream> #include<algorithm> using namespace std; in

  2. C ++でa%b =kとなるような配列内のすべてのペア(a、b)を検索します

    配列Aがあるとすると、その配列から、a%b =kとなるようにすべてのペア(a、b)を取得する必要があります。配列がA=[2、3、4、5、7]、k =3であるとすると、ペアは(7、4)、(3、4)、(3、5)、(3、7)になります。 これを解決するために、リストをトラバースして、指定された条件が満たされているかどうかを確認します。 例 #include <iostream> using namespace std; bool displayPairs(int arr[], int n, int k) {    bool pairAvilable = true;