在 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)

更新於:2019年10月24日

341 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.