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

モジュロ演算でC++でKが生成される2つの配列からペアをカウントします


正の数と値Kを含む2つの配列が与えられます。目標は、タイプ(A、B)のペアがA%B =KまたはB%A =Kであり、Aがに属するような配列の要素の一意のペアを見つけることです。最初のアレイとBは2番目のアレイに属します。

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

入力 − arr_1 [] ={1,2,5,3,4}; arr_2 [] ={7,1,3}; k =2

出力 −モジュロ演算でKが得られる2つの配列からのペアの数は− 2

説明 −ペアは(5,7)-(arr_1 [2]、arr_2 [1])7%5 =2および(5,3)-(arr_1 [2]、arr_2 [2])5%3 =2

入力 − arr_1 [] ={2,5}; arr_2 [] ={3,7}; k =1

出力 −モジュロ演算でKが得られる2つの配列からのペアの数は− 2

説明 −ペアは(2,3)-(arr_1 [0]、arr_2 [0])3%2 =1および(2,7)-(arr_1 [0]、arr_2 [1])7%2 =1

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

このアプローチでは、forループを使用して両方の配列をトラバースします。ペアをset> seに挿入します。ここで、A%B =kまたはB%A =kです。ここで、Aはarr_1に属し、Bはarr_2に属します。セットseの最後のサイズは、モジュロ演算でkが得られる2つの配列からの一意のペアの数です。

  • size_arr_1およびsize_arr_2として正の要素と長さを持つ整数配列arr_1[]およびarr_2[]を取ります。

  • 整数kを取る。

  • 関数modulo_pairs(int arr_1 []、int arr_2 []、int size_arr_1、int size_arr_2、int k)は、配列とその長さの両方を取り、両方の配列の要素のモジュロ演算がkを生成するようにペアを返します。

  • countの初期値を0とします。

  • set >se;を取得します。ペアの

  • arr_1[]をi=0からi

  • arr_1 [i]、arr_2 [j]のペアごとに、arr_1 [i]>arr_2[j]かどうかを確認します。はいの場合、arr_1 [i]%arr_2 [j]==kかどうかを確認します。 trueの場合、arr_1[i]とarr_2[j]のペアを作成し、挿入して設定します。

  • それ以外の場合は、arr_2 [j]%arr_1 [i]==kかどうかを確認します。 trueの場合、arr_1[i]とarr_2[j]のペアを作成し、挿入して設定します。

  • カウントをse.size()として計算します。一意のペアの数について。

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

#include <bits/stdc++.h>
using namespace std;
int modulo_pairs(int arr_1[], int arr_2[], int size_arr_1, int size_arr_2, int k){
   int count = 0;
   set<pair<int, int> > se;
   for (int i = 0; i < size_arr_2; i++){
      for (int j = 0; j < size_arr_1; j++){
         if (arr_1[i] > arr_2[j]){
            if (arr_1[i] % arr_2[j] == k){
               se.insert(make_pair(arr_1[i], arr_2[j]));
            }
         }
         else{
            if (arr_2[j] % arr_1[i] == k){
               se.insert(make_pair(arr_2[j], arr_1[i]));
            }
         }
      }
   }
   count = se.size();
   return count;
}
int main(){
   int arr_1[] = { 2, 7, 1, 9 };
   int arr_2[] = { 4, 10, 3, 10 };
   int size_arr_1 = sizeof(arr_1) / sizeof(arr_1[0]);
   int size_arr_2 = sizeof(arr_2) / sizeof(arr_2[0]);
   int k = 3;
   cout<<"Count of pairs from two arrays whose modulo operation yields K are:"<<modulo_pairs(arr_1, arr_2, size_arr_1, size_arr_2, k);
   return 0;
}

出力

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

Count of pairs from two arrays whose modulo operation yields K are: 2

  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) 以下のプログラムで使用されているアプ