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

C++で同じ桁数を持つ2つの配列から異なるペアをカウントします


たとえば、整数値を持つarr_1[]とarr_2[]の2つの配列が与えられます。タスクは、同じ桁数を持つ別個のペアの数を計算することです。つまり、1つの値をarr_1 []から選択し、2番目の値をarr_2 []から選択してペアを形成し、両方の値の合計桁数を同じにする必要があります。

配列は、同じタイプの要素の固定サイズの順次コレクションを格納できる一種のデータ構造です。配列はデータのコレクションを格納するために使用されますが、配列を同じタイプの変数のコレクションと考える方が便利な場合がよくあります。

Input − int arr_1[] = {1, 22, 42, 17}
   Int arr_2[] = {1, 31, 6, 8}
Output − count is 4

説明 −合計で、同じ桁の合計を持つ4つのペアがあり、それらは(1、1)、(22、31)、(42、6)、および(17、8)です。

Input − int arr_1[] = {1, 22, 42, 17}
   Int arr_2[] = {2, 78, 6, 18}
Output − count is 1

説明 −合計で、同じ桁数のペアは1つだけで、それは(42、6)です。

Input − int arr_1[] = {1, 22, 42, 17}
   Int arr_2[] = {2, 78, 16, 18}
Output − count is 0

説明 −同じ桁数のペアがないため、カウントは0です。

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

  • たとえば、arr_1[]とarr_2[]

    の2つの配列を作成します。
  • 配列内の要素ごとに整数値を返すlength()関数を使用して、両方の配列の長さを計算します。

  • セット型変数を作成します。たとえば、st

  • iを0に、iがarr_1 []

    のサイズ未満のループを開始します
  • ループ内で、jが0になり、jがarr_2[]のサイズよりも小さい場合に別のループを開始します。

  • Sum(arr [i])=sum(arr_2 [j])かどうかを確認し、arr_1[i]がarr_2[j]より小さいかどうかを確認してから、insert(make_pair(arr_1 [i]、arr_2 [j])

  • それ以外の場合は、insert(make_pair(arr_2 [j]、arr_1 [i])。

  • st.size()を返す

  • 結果を印刷します。

#include <iostream>
#include <set>
using namespace std;
// Function to find the
// sum of digits of a number
int sumdigits(int n){
   int sum = 0;
   while (n > 0){
      sum += n % 10;
      n = n / 10;
   }
   return sum;
}
//function to count the number of pairs
int paircount(int arr_1[], int arr_2[], int size1, int size2){
   // set is used to avoid duplicate pairs
   set<pair<int, int> > myset;
   for (int i = 0; i < size1; i++){
      for (int j = 0; j < size2; j++){
         // check sum of digits
         // of both the elements
         if (sumdigits(arr_1[i]) == sumdigits(arr_2[j])){
            if (arr_1[i] < arr_2[j]){
               myset.insert(make_pair(arr_1[i], arr_2[j]));
            } else{
               myset.insert(make_pair(arr_2[j], arr_1[i]));
            }
         }
      }
   }
   // return size of the set
   return myset.size();
}
// Driver code
int main(){
   int arr_1[] = { 1, 22, 42, 17 };
   int arr_2[] = { 5, 31, 6, 8 };
   int size1 = sizeof(arr_1) / sizeof(arr_1[0]);
   int size2 = sizeof(arr_2) / sizeof(arr_2[0]);
   cout <<"count is "<<paircount(arr_1, arr_2, size1, size2);
   return 0;
}

出力

上記のコードを実行すると、次の出力が得られます&miuns;

count is 3

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