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

C++でab=cdを満たす配列内のすべてのペア(a、b)と(c、d)を検索します


配列Aがあるとすると、その配列から、ab =cdとなるように2つのペア(a、b)と(c、d)を選択する必要があります。配列A=[3、4、7、1、2、9、8]とします。出力ペアは(4、2)と(1、8)です。これを解決するには、次の手順に従います-

  • i:=0からn-1の場合、do
    • for j:=i + 1 to n-1、do
      • get product =arr [i] * arr [j]
      • 製品がハッシュテーブルに存在しない場合、Hash [product]:=(i、j)
      • 製品がハッシュテーブルに存在する場合は、前の要素と現在の要素を出力します。

#include <iostream>
#include <unordered_map>
using namespace std;
void displayPairs(int arr[], int n) {
   bool found = false;
   unordered_map<int, pair < int, int > > Hash;
   for (int i=0; i<n; i++) {
      for (int j=i+1; j<n; j++) {
         int prod = arr[i]*arr[j];
         if (Hash.find(prod) == Hash.end())
            Hash[prod] = make_pair(i,j);
         else{
            pair<int,int> pp = Hash[prod];
            cout << "(" << arr[pp.first] << ", " << arr[pp.second] << ") and (" << arr[i]<<", "<<arr[j] << ")"<<endl; found = true;
         }
      }
   }
   if (found == false)
   cout << "No pairs have Found" << endl;
}
int main() {
   int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};
   int n = sizeof(arr)/sizeof(int);
   displayPairs(arr, n);
}

出力

(1, 6) and (2, 3)
(1, 8) and (2, 4)
(2, 6) and (3, 4)
(3, 8) and (4, 6)
>
  1. C ++では最初の配列に存在し、2番目には存在しない要素を検索します

    2つの配列AとBがあるとします。要素はほとんどありません。セットAには存在するが、セットBには存在しない要素を見つける必要があります。そのような状況を考え、AとBをセットと見なすと、これは基本的にセット分割操作です。 AとBのセットの差により、これらの要素が返されます。 例 #include<iostream> #include<set> #include<algorithm> #include<vector> using namespace std; void setDiffResults(int A[], int B[], int An, i

  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;