Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

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] =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)