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

合計がC++の配列にすでに存在する配列のペアを検索します


この問題では、N個の整数で構成される配列arr[]が与えられます。私たちのタスクは、合計がすでに配列に存在する配列内のペアを見つけることです。合計値=配列内の値のペアを見つける必要があります

問題を理解するために例を見てみましょう

入力

arr[] = {1, 2, 4, 6, 7}

出力

(1, 6), (2, 4)

説明

ペア(1、6)の場合、値の合計は7であり、配列に存在します。

ペア(2、4)の場合、値の合計は6であり、配列に存在します。

ソリューションアプローチ

この問題の簡単な解決策は、配列の要素を使用して可能なすべてのペアを見つけることです。次に、parirの値の合計を計算します。配列でこの合計値を検索し、存在する場合は出力します。

また、ペア数のカウンターがあります。また、0の場合、ペアは見つかりませんでした。

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;
void findSumPairsArr(int arr[], int n){
   int pairCount = 0;
   for (int i = 0; i < n; i++) {
      for (int j = i + 1; j < n; j++) {
         for (int k = 0; k < n; k++) {
            if (arr[i] + arr[j] == arr[k]) {
               cout<<"( "<<arr[i]<<", "<<arr[j]<<" ), sum = "<<(arr[i] + arr[j])<<"\n";
               pairCount++;
            }
         }
      }
   }
   if (!pairCount)
      cout<<"No Such Pairs found !";
}
int main() {
   int arr[] = { 1, 2, 4, 6, 7 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"Pairs in array whose sum already exists in array : \n";
   findSumPairsArr(arr, n);
   return 0;
}

出力

合計がすでに配列に存在する配列内のペア-

( 1, 6 ), sum = 7
( 2, 4 ), sum = 6

たまたまより効果的な別のアプローチは、ハッシュテーブルを使用して問題を解決することです。すべてのパリをチェックしてから、それらの合計を計算し、それが配列に存在するかどうかをチェックして、追跡します。 pairCountが0の場合、「そのようなペアは見つかりませんでした!」と出力します。

ここで、cでのハッシュテーブルの実装は、unordered_setを使用して行われます。

ソリューションの動作を説明するプログラム

#include <bits/stdc++.h>
using namespace std;
void findSumPairsArr(int arr[], int n) {
   unordered_set<int> HT;
   for (int i = 0; i < n; i++)
      HT.insert(arr[i]);
   int pairCount = 0;
   for (int i = 0; i < n; i++) {
      for (int j = i + 1; j < n; j++) {
         if (HT.find(arr[i] + arr[j]) != HT.end()) {
            cout<<"( "<<arr[i]<<", "<<arr[j]<<" ), sum =
            "<<(arr[i] + arr[j])<<"\n";
            pairCount ++;
         }
      }
   }
   if (!pairCount)
   cout<<"No Such Pairs found !";
}
int main() {
   int arr[] = {1, 2, 4, 6, 7 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"Pairs in array whose sum already exists in array : \n";
   findSumPairsArr(arr, n);
   return 0;
}

出力

合計がすでに配列に存在する配列内のペア-

( 1, 6 ), sum = 7
( 2, 4 ), sum = 6

  1. C ++で配列のすべての個別のサブセット(またはサブシーケンス)の合計を検索します

    整数のセットがあるとします。与えられたセットのサブセットから形成できる明確な合計を見つけて、昇順で印刷します。配列要素の合計は小さいです。配列要素が[1、2、3]のようなものだと考えてください。出力は0、1、2、3、4、5、6になります。個別のサブセットは{}、{1}、{2}、{3}、{1、2}、{2、3}、{1です。 、3}、{1、2、3}、合計値は0、1、2、3、3、5、4、6です。 これを解決するために、動的計画法のアプローチを使用します。指定された要素の合計が小さい場合、配列のサイズを含む行を含むDPテーブルを作成できます。列のサイズは、指定された配列内のすべての要素の合計になります

  2. 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 <