ধরুন 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