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

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、それらは同じです。

これを解決するために、配列を反復処理して値のすべてのペアをチェックし、新しい合計を比較するか、その差のある別のペアを探します。

#include<iostream>
using namespace std;
int arraySum(int arr[], int n) {
   int sum = 0;
   for (int i = 0; i < n; i++)
   sum += arr[i];
   return sum;
}
void getPair(int A[], int n, int B[], int m) {
   int sum_first = arraySum(A, n);
   int sum_second = arraySum(B, m);
   int newsum_first, newsum_second, first, second;
   for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
         newsum_first = sum_first - A[i] + B[j];
         newsum_second = sum_second - B[j] + A[i];
         if (newsum_first == newsum_second) {
            first = A[i];
            second = B[j];
         }
      }
   }
   cout << "(" << first << ", " << second << ")";
}
int main() {
   int A[] = { 4, 1, 2, 2, 1, 1 };
   int n = sizeof(A) / sizeof(A[0]);
   int B[] = { 3, 3, 6, 3 };
   int m = sizeof(B) / sizeof(B[0]);
   getPair(A, n, B, m);
}

出力

(1, 3)

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

    要素が少ない配列Aがあるとします。配列内のすべての異なる要素の合計を見つける必要があります。したがって、A =[5、12、63、5、33、47、12、63]の場合、個別の要素の合計は160になります。重複する要素は、考慮されると単に無視されます。 順序付けされていないセットを使用して、この問題を効率的に解決できます。 1つのforループを実行し、どの値が最初に来るか、そのadd in sum変数をハッシュテーブルに格納し、次回はこの値を使用しないようにします。 例 #include<iostream> #include<unordered_set> using nam

  2. C++で少なくとも2つの大きな要素を持つ配列内のすべての要素を検索します

    n個の数の配列があるとします。少なくとも2つの大きな要素を持つ配列内のすべての要素を見つける必要があります。配列がA=[2、8、7、1、5]のような場合、結果は[2、1、5]になります。 これを解決するために、2番目の最大要素を見つけてから、2番目の最大値以下のすべての要素を出力します。 例 #include<iostream> using namespace std; void searchElements(int arr[], int n) {    int first_max = INT_MIN, second_max = INT_MIN;