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

C++で合計がKに等しい2つの配列からペアをカウントします


2つの配列Arr1[]とArr2[]と数Kが与えられます。目標は、合計がKになるように両方の配列の要素の一意のペアを見つけることです。ペアは(Arr1 [i]、Arr2[j]の形式になります。 ])ここで、Arr1 [i] + Arr2 [j]==K。

iとjの2つのループを使用してトラバースします。合計(Arr1 [i] + Arr2 [j])==Kの場合。また、このペアはunordered_map には存在しません。それをマップに追加し、カウントを増やします。

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

入力

Arr1[]={ 1,3,2,4,3,2 }; Arr2[]={ 0,2,1,2,3 }; K=4

出力

Number of pairs with sum K : 4

説明

Pairs will be
( Arr1[0], Arr2[4] ) → (1,3)
( Arr1[1], Arr2[2] ) → (3,1)
( Arr1[2], Arr2[1] ) → (2,2)
( Arr1[3], Arr2[2] ) → (3,1)
All other pairs already exist.Total unique pairs 4.

入力

Arr1[]={ 0,2,1,2,3}; Arr2[]={ 1,1,1,1,1 }; K=3

出力

Number of pairs with sum K : 1

説明

Pairs will be
( Arr1[1], Arr2[0] ) → (2,1)
All other pairs already exist.Total unique pairs 1.

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

  • 2つの配列Arr1[]とArr2[]と、合計のための変数Kを取ります。

  • Len1とLen2は、両方の配列の長さを示すために使用されます。

  • 関数pairsumisK(int arr1 []、int arr2 []、int k、int l1、int l2)はすべての変数を受け取り、sum=kの両方の配列から要素の一意のペアの数を返します。

  • ペアの初期変数カウントを0とします。

  • unordered_map umapを使用して、一意のペアを保存します。

  • 2つのforループを使用して両方の配列をトラバースします。

  • arr1[]のi=0からiまでのarr2[]の要素の場合

  • 合計arr1[i]+ arr2 [j]=kかどうかを確認します。はいの場合、このペアがumap.find(....)==umap.end()。

    を介して存在するかどうかを確認します。
  • このペアをumapとインクリメントカウントに追加しない場合。

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

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

#include <bits/stdc++.h>
using namespace std;
int pairsumisK(int arr1[],int arr2[],int k,int l1,int l2){
   int count = 0;
   unordered_map<int, int> umap;
   for (int i = 0; i < l1; i++){
      for (int j = 0; j < l2; j++){
         int sum=arr1[i]+arr2[j];
         if(sum==k) //pairs with sum=k only{
            if(umap.find(arr1[i]) == umap.end()) //unique pairs only{
               umap.insert(make_pair(arr1[i],arr2[j]));
            }
         }
      }
   }
   return count;
}
int main(){
   int Arr1[]={ 1,2,3,0,2,4 };
   int Arr2[]={ 3,2,5,2 };
   int len1=sizeof(Arr1)/sizeof(Arr1[0]);
   int len2=sizeof(Arr2)/sizeof(Arr2[0]);
   int K=5; //length of array
   cout <<endl<< "Number of pairs with sum K : "<<pairsumisK(Arr1,Arr2,K,len1,len2);
   return 0;
}

出力

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

Number of pairs with sum K : 0

  1. C++プログラムで2つの配列から要素を順番に選択することによる最大合計

    この問題では、2つの配列arr1[]とarr2[]、および2つの数値NとMが与えられます。 Nは、arr1から取得した要素の数を示します。 Mは、arr2から取得した要素の数を示します。 arr1[i]からarr2[i]までの要素の1つを選択する必要があります。 合計は最大になりますが、最大Nはarr1から取得でき、Mはarr2から取得できます。 私たちのタスクは、C ++で2つの配列から要素を順番に選択することにより、最大合計を見つけるプログラムを作成することです。 問題を理解するために例を見てみましょう 入力 arr1[] = {5, 1, 6, 2, 8, 9} arr2[

  2. 合計がC++の指定された値xに等しい2つのBSTからペアをカウントします

    入力として2つの二分探索木と変数xが与えられます。目標は、ノードの値の合計がxに等しくなるように、各ツリーからノードのペアを見つけることです。 BST_1からノード1を取得し、BST_2からノード2を取得して、両方のデータ部分を追加します。 sum=xの場合。インクリメントカウント。 例を挙げて理解しましょう。 入力 出力 −合計が特定の値xに等しい2つのBSTからのペアの数は− 1 説明 −ペアは(8,6) 入力 出力 −合計が特定の値xに等しい2つのBSTからのペアの数は− 2 説明 −ペアは(5,15)と(4,16) 以下のプログラムで使用されているアプ