এই সমস্যায় একটি আনসর্টেড অ্যারে দেওয়া আছে। আমাদের এই অ্যারেতে থেকে যেসব জোড়ার যোগফল সমান সেগুলো প্রিন্ট করতে হবে।
উদাহরণ
ইনপুট: array = [12, 13, 20, 5] আউটপুট: [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