मान लीजिए 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