找到一对元素交换,这使两个数组的总和在C ++中相同

考虑我们有两个具有不同元素数量的数组。我们必须找到一对元素(x,y),其中x在第一个数组中存在,而y在第二个数组中存在。将选择该对,以便在这两个数组之间交换元素之后,这两个数组的总和将相同。

假设第一个数组A持有[4,1,2,2,1,1],B持有[3,3,6,3],现在A的总和为11,B的总和为15,我们将一对(1,3),如果我们在这两个数组之间交换这些值,则总和为:[4,3,2,2,1,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)

以上是 找到一对元素交换,这使两个数组的总和在C ++中相同 的全部内容, 来源链接: utcz.com/z/316787.html

回到顶部