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)