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

C ++の配列内の非反復(個別)要素の合計を検索します


要素が少ない配列Aがあるとします。配列内のすべての異なる要素の合計を見つける必要があります。したがって、A =[5、12、63、5、33、47、12、63]の場合、個別の要素の合計は160になります。重複する要素は、考慮されると単に無視されます。

順序付けされていないセットを使用して、この問題を効率的に解決できます。 1つのforループを実行し、どの値が最初に来るか、そのadd in sum変数をハッシュテーブルに格納し、次回はこの値を使用しないようにします。

#include<iostream>
#include<unordered_set>
using namespace std;
int getNonRepeatSum(int arr[],int n) {
   int sum = 0;
   unordered_set< int > u_set;
   for (int i=0; i<n; i++) {
      if (u_set.find(arr[i]) == u_set.end()) {
         sum += arr[i];
         u_set.insert(arr[i]);
      }
   }
   return sum;
}
int main() {
   int arr[] = {5, 12, 63, 5, 33, 47, 12, 63};
   int n = sizeof(arr)/sizeof(int);
   cout << "Sum is: " << getNonRepeatSum(arr, n);
}

出力

Sum is: 160

  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++で2つの配列の合計を同じにする要素スワッピングのペアを見つけます

    要素数が異なる2つの配列があるとします。要素のペア(x​​、y)を見つける必要があります。ここで、xは最初の配列に存在し、yは2番目の配列に存在します。ペアは、これら2つの配列間で要素を交換した後、これら2つの配列の合計が同じになるように選択されます。 最初の配列Aが[4、1、2、2、1、1]を保持し、Bが[3、3、6、3]を保持しているとすると、Aの合計は11、Bの合計は15になります。 (1、3)のようなペアで、これら2つの配列間でこれらの値を交換すると、合計は次のようになります。[4、3、2、2、1、1] =13、[1、3、6、3] =13、それらは同じです。 これを解決するために、