কম্পিউটার টিউটোরিয়াল

C++-এ সমতুল্য পারেন্থেসিসের সব কম্বিনেশন প্রিন্ট করা

এই সমস্যায় একটি পূর্ণসংখ্যা n দেওয়া আছে। আমাদের n জোড়া সমতুল্য পারেন্থেসিসের সব সম্ভাব্য কম্বিনেশন প্রিন্ট করতে হবে।

সমতুল্য পারেন্থেসিস হলো সেই পারেন্থেসিস জোড়া যাদের প্রতিটি ওপেনিং সিম্বলের জন্য একটি ক্লোজিং সিম্বল থাকে। এছাড়া জোড়াগুলো সঠিকভাবে নেস্টেড থাকতে হবে।

উদাহরণ

ইনপুট: n = 2
আউটপুট: {}{} {{}}

এই সমস্যাটি সমাধানের জন্য ব্র্যাকেটের জোড়াগুলোর ট্র্যাক রাখতে হবে। প্রাথমিক ব্র্যাকেট কাউন্ট ০। তারপর একটি ফাংশন রিকার্সিভলি কল করা হবে যতক্ষণ না মোট ব্র্যাকেট কাউন্ট n হয়। ব্র্যাকেট কাউন্ট করে, কাউন্টের ভিত্তিতে রিকার্সিভ কল করা হবে। যদি ওপেনিং ব্র্যাকেটের কাউন্ট ক্লোজিং ব্র্যাকেটের চেয়ে বেশি হয়, তবে ক্লোজিং ব্র্যাকেট বসানো হবে এবং বাকি জোড়াগুলোর জন্য রিকার্সিভ কল করা হবে। যদি ওপেনিং ব্র্যাকেটের কাউন্ট n-এর চেয়ে কম হয়, তবে বাকি জোড়াগুলোর জন্য রিকার্সিভ কল করা হবে।

বাস্তবায়ন

# include<iostream> 
using namespace std; 
# define MAX_COUNT 100 

void printParenthesesPairs(int pos, int n, int open, int close) { 
    static char str[MAX_COUNT]; 
    if (close == n) { 
        cout << str << endl; 
        return; 
    } else { 
        if (open > close) { 
            str[pos] = '}'; 
            printParenthesesPairs(pos+1, n, open, close+1); 
        } 
        if (open < n) { 
            str[pos] = '{'; 
            printParenthesesPairs(pos+1, n, open+1, close); 
        } 
    } 
} 

int main() { 
    int n = 3; 
    cout << "All parentheses pairs of length " << n << " are:\n"; 
    if (n > 0) 
        printParenthesesPairs(0, n, 0, 0); 
    getchar(); 
    return 0; 
}

আউটপুট

All parentheses pairs of length 3 are :
{}{}{} {}{{}} {{}}{} {{}{}} {{{}}}
  1. স্ট্রিংয়ের সব সাবসিকোয়েন্স প্রিন্ট করা C++-তে

  2. লেক্সিকোগ্রাফিক্যাল অর্ডারে স্ট্রিংয়ের সব কম্বিনেশন প্রিন্ট করা C++-তে

  3. নির্দিষ্ট যোগফল দিয়ে সব পেয়ার প্রিন্ট করা C++-তে

  4. স্ট্রিংয়ের সব প্যালিনড্রোম পারমুটেশন প্রিন্ট করা C++-তে