কম্পিউটার

C++ এ প্রদত্ত যোগফল সহ সমস্ত ট্রিপলেট প্রিন্ট করুন


এই সমস্যায়, আমাদেরকে অনন্য পূর্ণসংখ্যার একটি অ্যারে এবং একটি যোগফল দেওয়া হয়েছে। এবং আমাদের খুঁজে বের করতে হবে ট্রিপলেট যা একইসাম গঠন করতে পারে।

সমস্যা সমাধানের জন্য একটি উদাহরণ নেওয়া যাক −

Input : array = {0 , 2 , -1 , 1, -2}
Sum = 1
Output : 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;
            }
         }
      }
   }
}
// Driver code
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++ এ সমস্ত পথ প্রিন্ট করুন

  2. একটি প্রদত্ত স্ট্রিং এর সমস্ত সাবস্ট্রিং C++ এ প্রিন্ট করার জন্য প্রোগ্রাম

  3. C++ এ একটি প্রদত্ত পরিসরে সমস্ত প্যালিনড্রোম প্রিন্ট করার জন্য প্রোগ্রাম

  4. সমস্ত অনন্য ট্রিপলেট যা C++ এ একটি প্রদত্ত মান পর্যন্ত যোগ করে