Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में दिए गए योग वाले सभी ट्रिपलेट प्रिंट करें


इस समस्या में, हमें अद्वितीय पूर्णांकों की एक सरणी और एक योग दिया गया है। और हमें उन ट्रिपलेट को ढूंढना है जो समान योग बना सकते हैं।

समस्या को हल करने के लिए एक उदाहरण लेते हैं -

इनपुट: सरणी = {0 , 2 , -1 , 1, -2} योग = 1 आउटपुट: 1 2 -2 0 2 -1

इस समस्या को हल करने के लिए, हम उन सभी ट्रिपलेट को ढूंढेंगे जो योग प्रदान करते हैं। एक सरल दृष्टिकोण तीन लूप का उपयोग करना और तत्वों का योग ढूंढना और पर्याप्त ट्रिपलेट वापस करना होगा।

उदाहरण

#include <iostream> using namespace std; void Triplets(int arr[], int n, int sum){    for (int i = 0; i < n - 2; i++) {       for (int j = i + 1; j < n - 1; j++) {          for (int k = j + 1; k < n; k++) {             if (arr[i] + arr[j] + arr[k] == sum) {                cout<<arr[i]<<"\t"<<arr[j]<<"\t"<<arr[k]<<endl;             }          }       }    } } // ड्राइवर कोड int main(){    int arr[] = { 0 , 2 , -1 , 1, -2 };    int n = sizeof(arr) / sizeof(arr[0]);    cout<<"The Triplets are : \n";    Triplets(arr, n, 1);    return 0; }

आउटपुट

ट्रिपलेट हैं -

0 2 -1 2 1 -2

लेकिन यह दृष्टिकोण कुशल नहीं है क्योंकि तीन लूप चलाने के लिए इसकी समय जटिलता o(n^3) होगी। इसलिए, हम इस समस्या को प्रभावी तरीके से हल करने के लिए अन्य तकनीकों का उपयोग करेंगे।

एक विधि हैशिंग का उपयोग करना है। इस विधि में, हम प्रत्येक तत्व के ऐसे युग्म ढूंढेंगे जो एक दूसरे के पूरक हों यानी मान x वाले तत्व के लिए, हमें -x मान वाला तत्व चाहिए।

यह कोड की समय जटिलता को कम करता है।

उदाहरण

#include <bits/stdc++.h> using namespace std; void Triplets(int arr[], int n, int sum{    for (int i = 0; i < n - 1; i++) {       unordered_set<int> triplet;       for (int j = i + 1; j < n; j++) {          int third = sum - (arr[i] + arr[j]);          if (triplet.find(third) != triplet.end())             cout<<third<<"\t"<<arr[i]<<"\t"<<arr[j]<<endl;          else             triplet.insert(arr[j]);       }    } } int main(){    int arr[] = { 0 , 2 , -1 , 1, -2 };    int n = sizeof(arr) / sizeof(arr[0]);    cout<<"The Triplets are : \n";    Triplets(arr, n, 1);    return 0; }

आउटपुट

ट्रिपलेट हैं -

0 2 -1 2 1 -2

इस विधि को सरणी को क्रमबद्ध करके और अधिक प्रभावी बनाया जा सकता है जो कोड की स्थान जटिलता को कम करेगा।


  1. C++ में दिए गए स्रोत से गंतव्य तक सभी पथ प्रिंट करें C++ में दिए गए स्रोत से गंतव्य तक सभी पथ प्रिंट करें

    इस समस्या में हमें एक निर्देशित ग्राफ दिया गया है और हमें ग्राफ के स्रोत से गंतव्य तक सभी पथ प्रिंट करने हैं। निर्देशित ग्राफ एक ग्राफ है जिसमें किनारे शीर्ष a से b की ओर निर्देशित होते हैं। समस्या को समझने के लिए एक उदाहरण लेते हैं स्रोत = K गंतव्य = P आउटपुट: P यहां, हमने K से P तक के पथ ढूंढे

  1. - C++ में दी गई रेंज में सभी पालिंड्रोम प्रिंट करने का प्रोग्राम

    इस ट्यूटोरियल में, हम दी गई रेंज में सभी पालिंड्रोम प्रिंट करने के प्रोग्राम पर चर्चा करेंगे। इसके लिए हमें वह गणितीय रेंज दी जाएगी जिसमें पालिंड्रोम ढूंढने हैं। हमारा कार्य उस रेंज में सभी पालिंड्रोम ढूंढना और उन्हें वापस प्रिंट करना है। उदाहरण #include 0; i /= 10) rev = rev*10 + i%10;

  1. - C++ में दिए गए मान के बराबर योग वाले सभी अद्वितीय ट्रिपलेट्स ढूंढना

    यहां हम एक दिलचस्प समस्या देखेंगे। हमारे पास कुछ तत्वों के साथ एक सरणी है। एक योग मान दिया गया है। हमारा कार्य सरणी से ट्रिपलेट्स ढूंढना है, और जिनका योग दिए गए योग के समान है। मान लीजिए सरणी है {4, 8, 63, 21, 24, 3, 6, 1, 0}, और योग मान S = 18 है। तो ट्रिपलेट्स होंगे {4, 6, 8}। यदि एक से अधिक ट्रिप