इस समस्या में, हमारे पास एक अनसॉर्टेड ऐरे है और हमें इस ऐरे के भीतर उन सभी जोड़ों को प्रिंट करना है जिनका योग समान हो।
उदाहरण
Input: array = [12, 13, 20, 5] Output: [12, 13] and [20, 5] have sum 25.
इस समस्या को हल करने के लिए, हमें समान योग वाले जोड़े ढूंढने होंगे। इसके लिए, हम जोड़ों की जांच समान योग के लिए करेंगे। और डुप्लिकेट जोड़ों से बचने के लिए, हम मैप का उपयोग करेंगे।
इसके लिए, हमें दो मैप की आवश्यकता होगी: एक सभी जोड़ों और उनके योग को संग्रहीत करने के लिए और दूसरा सभी योग और उनके संबंधित जोड़ों को संग्रहीत करने के लिए।
तो, Map1 → key = जोड़े; value → योग
Map2 → key = योग पूर्णांक; value → जोड़ों का वेक्टर
अब, उन सभी मानों को प्रिंट करें जिनका योग मान समान हो।
उदाहरण
उपरोक्त तर्क को दर्शाने वाला प्रोग्राम:
#include <bits/stdc++.h>
using namespace std;
void findEqualSumPairs(int A[], int n) {
map<int, vector<pair<int, int> > > map1;
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
pair<int, int> p = make_pair(A[i], A[j]);
map1[A[i] + A[j]].push_back(p);
}
}
for (auto value = map1.begin(); value != map1.end(); value++) {
if (value->second.size() > 1) {
for (int i = 0; i < value->second.size(); i++) {
cout << "[ " << value->second[i].first << ", " << value->second[i].second << "] ";
}
cout << "have sum : " << value->first << endl;
}
}
}
int main() {
int A[] = { 6, 4, 12, 10, 22, 11, 8, 2 };
int n = sizeof(A) / sizeof(A[0]);
cout << "Pairs with same sum are : \n";
findEqualSumPairs(A, n);
return 0;
}
आउटपुट
Pairs with same sum are -
[ 6, 4] [ 8, 2] have sum : 10 [ 4, 8] [ 10, 2] have sum : 12 [ 6, 8] [ 4, 10] [ 12, 2] have sum : 14 [ 6, 10] [ 4, 12] have sum : 16 [ 6, 12] [ 10, 8] have sum : 18