ধরুন n সংখ্যার একটি অ্যারে আছে। আমাদের তিনটি সংখ্যা খুঁজে বের করতে হবে, যেমন দুটি উপাদানের যোগফল তৃতীয়টির সমান। সুতরাং যদি অ্যারেটি [5, 32, 1, 7, 10, 50, 19, 21, 2] এর মতো হয়, তাহলে আউটপুট হবে 21, 2, 19। যদি এমন কোনো উপাদান খুঁজে না পাওয়া যায়, তাহলে সেই বার্তাটি প্রদর্শন করুন।
এটি সমাধানের জন্য, আমরা নিম্নরূপ কিছু পদক্ষেপ অনুসরণ করব -
-
প্রদত্ত অ্যারে সাজান
-
তারপরে শেষ উপাদান থেকে সর্বশ্রেষ্ঠ উপাদানটি ঠিক করা শুরু করুন এবং তৃতীয় উপাদানের সমষ্টির জন্য অন্য দুটি সংখ্যা খুঁজে পেতে অ্যারেটি অতিক্রম করুন৷
-
দুইটি পয়েন্টার j এবং k নিন, j হল প্রথম থেকে, k হল শেষ থেকে দুটি সংখ্যার ছোটটি বের করতে i - 1 থেকে দুটি সংখ্যার মধ্যে সবচেয়ে বড়টি বের করতে।
-
যদি উভয় সংখ্যার যোগ এখনও Arr[i] থেকে কম হয়, তাহলে আমাদের দুটি সংখ্যার যোগফলের মান বাড়াতে হবে, এর ফলে j পয়েন্টার বাড়াতে হবে, যাতে Arr[j] + Arr[-এর মান বাড়ানো যায়। k]
-
যদি উভয় সংখ্যার যোগ Arr[i] এর চেয়ে বেশি হয়, তাহলে আমাদের দুটি সংখ্যার যোগফলের মান কমাতে হবে, এর ফলে পয়েন্টার k হ্রাস করতে হবে, যাতে Arr[j] + Arr[k এর সামগ্রিক মান হ্রাস পায়। ]
উদাহরণ
#include<iostream>
#include<algorithm>
#define N 5
using namespace std;
void getValueTriplet(int arr[], int n) {
sort(arr, arr + n);
for (int i = n - 1; i >= 0; i--) {
int j = 0;
int k = i - 1;
while (j < k) {
if (arr[i] == arr[j] + arr[k]) {
cout << "The numbers are " << arr[i] << " " << arr[j] << " " << arr[k] << endl;
return;
}
else if (arr[i] > arr[j] + arr[k])
j += 1;
else
k -= 1;
}
}
cout << "No such triplet exists";
}
int main() {
int arr[] = { 5, 32, 1, 7, 10, 50, 19, 21, 2 };
int n = sizeof(arr) / sizeof(arr[0]);
getValueTriplet(arr, n);
} আউটপুট
The numbers are 21 2 19