इस समस्या में, हमारे पास एक अवर्गीकृत सरणी है और हमें इस सरणी के भीतर उन सभी युग्मों को प्रिंट करना है जिनका योग समान है।
आइए समस्या को समझने के लिए एक उदाहरण लेते हैं -
Input: array = [12, 13, 20, 5] Output: [12, 13] and [20, 5] have sum 25.
इस समस्या को हल करने के लिए, हमें समान योग के जोड़े खोजने होंगे। इसके लिए, हम समान राशि के लिए जोड़ियों की जांच करेंगे। और डुप्लीकेट जोड़े से बचने के लिए, हम मानचित्र का उपयोग करेंगे।
इसके लिए, हमें दो मानचित्रों की आवश्यकता होगी, एक सभी योग जोड़े और उनके योग को संग्रहीत करने के लिए और अन्य सभी योग और उनके संबंधित जोड़े को संग्रहीत करने के लिए।
तो, Map1 → कुंजी =जोड़े; मान → योग
Map2 → कुंजी =योग पूर्णांक; मान → जोड़ी का वेक्टर
अब, उन सभी मानों को प्रिंट करें जिनका योग मान समान है।
उदाहरण
उपरोक्त तर्क को स्पष्ट करने का कार्यक्रम -
#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; }
आउटपुट
समान योग वाले जोड़े हैं -
[ 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