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

C++ में दिए गए व्यंजक के सभी संभावित परिणाम ज्ञात कीजिए

मान लीजिए कि हमारे पास बिना कोष्ठक के एक अंकगणितीय व्यंजक है। हमारा कार्य उस अभिव्यक्ति के सभी संभावित परिणामों को खोजना है। मान लीजिए कि व्यंजक 1+2*3-4 जैसा है, इसकी व्याख्या नीचे की तरह की जा सकती है -

  • 1+(2*(3-4)) =1 + (2* -1) =-1
  • (1+2)*(3-4) =3 * -1 =-3
  • 1+((2*3)-4) =1 + (6 - 4) =3
  • ((1+2)*3)-4 =(3 * 3) - 4 =5
  • 1+(2*3)-4 =1 + 6 - 4 =3

इस समस्या को हल करने के लिए, हमें इन चरणों का पालन करना होगा -

  • प्रारंभ में रेस को खाली के रूप में सेट करें

  • प्रत्येक ऑपरेटर x के लिए, निम्न कार्य करें -

    • x के बाईं ओर सभी संभावित मानों का पुनरावर्ती मूल्यांकन करें, मानों की सूची को L होने दें

    • x के दाईं ओर सभी संभावित मानों का पुनरावर्ती मूल्यांकन करें, मान लें कि मानों की सूची R

      . है
    • एल में सभी मानों के माध्यम से लूप करें:

      • R−

        . में सभी मानों के माध्यम से लूप करें
        • L और R में वर्तमान तत्व पर वर्तमान ऑपरेटर x लागू करें, और मूल्यांकन किए गए मानों को res में जोड़ें

  • रेस को आउटपुट के रूप में लौटाएं

उदाहरण

#include<iostream>
#include<vector>
using namespace std;
int solve(int a, char op, int b) {
   if (op=='+')
      return a+b;
   if (op=='-')
      return a-b;
   if (op == '*')
      return a*b;
}
vector<int> getAllResults(string expr, int low, int high) {
   vector<int> res;
   if (low == high) {
      res.push_back(expr[low] - '0');
      return res;
   }
   if (low == (high-2)) {
      int num = solve(expr[low]-'0', expr[low+1], expr[low+2]-'0');
      res.push_back(num);
      return res;
   }
   for (int i=low+1; i<=high; i+=2) {
      vector<int> L = evaluateAll(expr, low, i-1);
      vector R = evaluateAll(expr, i+1, high);
      for (int s1=0; s1<L.size(); s1++) {
         for (int s2=0; s2<R.size(); s2++) {
            int val = solve(L[s1], expr[i], R[s2]);
            res.push_back(val);
         }
      }
   }
   return res;
}
int main() {
   string expr = "1+2*3-4";
   vector<int> ans = getAllResults(expr, 0, expr.length()-1);
   for (int i=0; i< ans.size(); i++)
      cout << ans[i] << endl;
}

आउटपुट

2 1 4 3 5 6 7 8

  1. C++ में दिए गए समुच्चय के सभी भिन्न उपसमुच्चय ज्ञात कीजिए

    यहां हम देखेंगे कि किसी दिए गए सेट के सभी अलग-अलग सबसेट को कैसे प्रदर्शित किया जाए। अतः यदि समुच्चय {1, 2, 3} है, तो उपसमुच्चय {}, {1}, {2}, {3}, {1, 2}, {2, 3}, {1, 3} होंगे। , {1, 2, 3}। सभी उपसमुच्चयों के समुच्चय को घात समुच्चय कहते हैं। पावर सेट में 2n तत्व होते हैं। हम 0 से 2n (छोड़कर) के माध्

  1. C++ का उपयोग करके दिए गए नंबर तक जोड़ने वाले सभी संयोजन खोजें

    मान लीजिए कि हमारे पास एक सकारात्मक संख्या n है। हमें सकारात्मक संख्याओं के सभी संयोजनों को खोजना है, जो उस संख्या में जुड़ते हैं। यहां हम केवल संयोजन चाहते हैं, क्रमपरिवर्तन नहीं। मान n =4 के लिए, [1, 1, 1, 1], [1, 1, 2], [2, 2], [1, 3], [4] होंगे। हम इसे रिकर्सन का उपयोग करके हल करेंगे। हमारे पास

  1. C++ प्रोग्राम दी गई संख्याओं की सूची के सभी संभावित संयोजनों को उत्पन्न करने के लिए

    यह दी गई संख्याओं की सूची के सभी संभावित संयोजनों को उत्पन्न करने के लिए एक C++ प्रोग्राम है एल्गोरिदम Begin    Take the number of elements and the elements as input.    function Combi(char a[], int reqLen, int s, int currLen, bool check[], int l) :    If currLen>req