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

C++ बैलेंस्ड एक्सप्रेशन जैसे कि दी गई पोजीशन में ओपनिंग ब्रैकेट्स हों

कोष्ठकों का एक संतुलित व्यंजक एक ऐसा व्यंजक है जिसमें सभी प्रकार के कोष्ठकों के जोड़े एक साथ सही क्रम में होते हैं। इसका अर्थ यह है कि प्रत्येक प्रारंभिक कोष्ठक के लिए कोष्ठकों के उचित क्रम में एक समापन कोष्ठक होता है अर्थात { }।

अभिव्यक्ति - {([][]{})({}[]{})}

आउटपुट - संतुलित

अब, इस समस्या में हमें दी गई कोष्ठकों की संख्या से सभी संभव संतुलित व्यंजक बनाने हैं। और शर्त यह है कि दी गई स्थिति में प्रारंभिक कोष्ठक हों।

इस समस्या में, हमें एक पूर्णांक n और लंबाई 2n के कोष्ठकों की स्थिति की एक सरणी दी जाती है और हमें लंबाई 2n के संतुलित व्यंजकों की संख्या इस प्रकार से ज्ञात करनी होती है कि कोष्ठक खोलने से चिह्नित स्थिति में उद्घाटन कोष्ठक हो। {'.

उदाहरण -

Input : n = 2 , position [1, 0 , 0 , 0].
Output : 2
Explanation : All possible outcomes are : {{}} , {}{}.

एल्गोरिदम

  • एक वाली सभी स्थितियां खुले कोष्ठक हैं।

  • निम्नलिखित नियमों का उपयोग करके पुनरावर्ती लूप का उपयोग करें,

    • यदि (शुरुआती कोष्ठकों की संख्या - समापन कोष्ठकों की संख्या)> 0 , तो 0 पर लौटें।

    • n तक लूप करने के बाद और यदि पुश और पॉप के बाद कुल कोष्ठक 0 है, तो 1 लौटाएं अर्थात प्राप्त समाधान। नहीं तो 0.

      . लौटाएं
    • अगर एक्सप्रेशन को 1 पहले से असाइन किया गया है, तो इंडेक्स को बढ़ाने और ब्रैकेट की कुल संख्या बढ़ाने पर दोबारा कॉल करें।

    • अन्यथा अनुक्रमणिका स्थान पर खुले कोष्ठकों को सम्मिलित करके फ़ंक्शन को पुनरावर्ती रूप से कॉल करें और फिर इसके लिए बंद कोष्ठक डालें और कोष्ठक की कुल संख्या घटाएँ और अगले अनुक्रमणिका पर जाएँ।

कार्यक्रम

#include <bits/stdc++.h>
using namespace std;
int find(int index, int openbrk, int n, int expression[]){
   if (openbrk < 0)
      return 0;
   if (index == n){
      if (openbrk == 0)
         return 1;
      else
         return 0;
   }
   if (expression[index] == 1) {
      return find(index + 1, openbrk + 1, n, expression);
   } else {
      return find(index + 1, openbrk + 1, n, expression) + find(index + 1, openbrk - 1, n, expression);
   }
}
int main() {
   int n = 3;
   int expression[6] = { 1, 0, 1, 0, 0, 0};
   cout << find(0, 0, 2 * n, expression) <<endl;
   return 0;
}

आउटपुट

3


  1. एक सरणी में सभी जोड़े (ए, बी) खोजें जैसे कि सी ++ में% बी =के

    मान लीजिए कि हमारे पास एक सरणी ए है, उस सरणी से, हमें सभी जोड़े (ए, बी) प्राप्त करना है जैसे कि ए% बी =के। मान लीजिए कि सरणी A =[2, 3, 4, 5, 7] और k =3 है, तो जोड़े (7, 4), (3, 4), (3, 5), (3, 7) हैं। इसे हल करने के लिए, हम सूची को देखेंगे और जांचेंगे कि दी गई शर्त संतोषजनक है या नहीं। उदाहरण #inc

  1. ऐसी संख्या x ज्ञात कीजिए कि C++ में x और उसके अंकों का योग दिए गए n के बराबर हो

    यहां हम एक समस्या देखेंगे, जहां हम एक संख्या n लेते हैं, हमें एक और मान x ज्ञात करना होता है, जैसे कि x का x + अंकों का योग दी गई संख्या n के समान हो। मान लीजिए n का मान 21 है। यह प्रोग्राम एक संख्या x =15, 15 + अंकों का योग 15, यानी 15 + 1 + 5 =21 =n के रूप में लौटाएगा। इस समस्या को हल करने के लिए

  1. दी गई श्रेणी में एक अलग जोड़ी (x, y) खोजें जैसे कि x, y को C++ में विभाजित करता है

    यहां हम एक दिलचस्प समस्या देखेंगे, हमें एक जोड़ी (x, y) मिलेगी, जहां x और y श्रेणी में हैं इसलिए l <=x, y <=r, जोड़ी में एक संपत्ति होगी, x का मान y को विभाजित करता है . यदि कई जोड़े उपलब्ध हैं, तो केवल एक को चुनें। हम इस समस्या को O(1) समय में हल कर सकते हैं, यदि हमें निचली सीमा l और 2l का मान प्र