Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm một cặp hoán đổi phần tử làm cho tổng của hai mảng giống nhau trong C ++

Hãy xem xét chúng ta có hai mảng với số phần tử khác nhau. Chúng ta phải tìm một cặp phần tử (x, y), trong đó x có mặt trong mảng đầu tiên và y có mặt trong mảng thứ hai. Cặp sẽ được chọn sao cho sau khi hoán đổi các phần tử giữa hai mảng này, tổng của hai mảng này sẽ bằng nhau.

Giả sử mảng đầu tiên A đang nắm giữ [4, 1, 2, 2, 1, 1] và B đang nắm giữ [3, 3, 6, 3], bây giờ tổng của A là 11 và tổng của B là 15, chúng ta sẽ lấy một cặp như (1, 3), nếu chúng ta hoán đổi các giá trị này giữa hai mảng này, thì tổng sẽ là:[4, 3, 2, 2, 1, 1] =13, [1, 3, 6, 3] =13, chúng giống nhau.

Để giải quyết vấn đề này, chúng tôi sẽ lặp qua mảng và kiểm tra tất cả các cặp giá trị, so sánh các tổng mới hoặc tìm kiếm một cặp khác với sự khác biệt đó.

Ví dụ

#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);
}

Đầu ra

(1, 3)