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

C ++では、最初の配列には存在するが2番目には存在しない要素をカウントします


整数要素を含む任意のサイズの配列が与えられます。タスクは、最初の配列には存在するが2番目の配列には存在しない要素の数を計算することです。

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

Input− int arr_1[] = {1, 2, 3, 4}
      Int arr_2[] = {1, 5, 6, 7, 8}
Output − count is 3

説明 −指定されたarr_1には要素1、2、3、および4があり、arr_2には1、5、6、7、および8があります。要素1は両方の配列に存在するため、カウントしません。カウントは3になります。

Input − int arr_1[] = {10, 20, 30, 40, 50}
      Int arr_2[] = {10, 20, 30, 60}
Output − count is 2

説明 −指定されたarr_1には要素10、20、30、40、および50があり、arr_2には10、20、30、および60があります。要素10、20、および30は両方の配列に存在するため、カウントされません。それら、したがってカウントは2になります。

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

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

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

  • 最初の配列にのみ存在する要素の数を格納する一時変数を取ります。

  • 順序付けられていないマップを作成しましょう

  • iがarr_1のサイズより小さくなるまで、iから0までのループを開始します

  • [arr_1[i]]を1でインクリメント

  • iがarr_2のサイズより小さくなるまで、iを0にして別のループを開始します

  • ループ内で、up.find(arr_2 [i])!=up.end()およびup [arr_2 [i]]!=0

    かどうかを確認します
  • [arr_2[i]]を1だけデクリメントします

  • iがarr_1のサイズより小さくなるまで、iを0にして別のループを開始します

  • ループ内で、up [arr_1 [i]!=0

    かどうかを確認します
  • 次に、カウントを1増やし、[arr_1 [i]] =0

    を設定します。
  • カウントを返す

  • 結果を印刷します。

#include <iostream>
#include<unordered_map>
using namespace std;
int elements_count(int arr_1[], int arr_2[], int m, int n){
   bool f = false;
   int result = 0;
   // map to store frequency of elements present in a
   unordered_map<int, int> up;
   for (int i = 0; i < m; i++){
      up[arr_1[i]]++;
   }
   // check if the elements of b
   // is present in b or not
   for (int i = 0; i < n; i++)
   if (up.find(arr_2[i]) != up.end() && up[arr_2[i]] != 0){
      up[arr_2[i]]--;
   }
   // count the elements of a whose
   // frequency is more than b
   for (int i = 0; i < m; i++) {
      if (up[arr_1[i]] != 0){
         result++;
         up[arr_1[i]] = 0;
      }
   }
   return result;
}
// Main function
int main(){
   int arr_1[] = { 2, 4, 4, 6, 6, 6, 8, 9 };
   int arr_2[] = { 2, 2, 4, 6, 6 };
   int m = sizeof(arr_1)/sizeof(arr_1[0]);
   int n = sizeof(arr_2)/sizeof(arr_2[0]);
   cout <<"count is "<<elements_count(arr_1, arr_2, m, n);
   return 0;
}

出力

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

count is 4

  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++プログラム

    カウント反転とは、配列をソートするために必要なスイッチの数を意味します。配列がソートされている場合、反転カウント=0。反転カウント=配列が逆の順序でソートされた場合の最大値。 配列内の反転をカウントするC++プログラムを開発しましょう。 アルゴリズム Begin    Function CountInversionArray has arguments a[], n = number of elements.    initialize counter c := 0    for i in range 0 to n-1, do &n