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

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

  • प्रारंभ में res को खाली सेट करें
  • प्रत्येक ऑपरेटर x के लिए, निम्नलिखित करें:
    • x के बाईं ओर सभी संभावित मानों का पुनरावर्ती मूल्यांकन करें, मानों की सूची L हो
    • x के दाईं ओर सभी संभावित मानों का पुनरावर्ती मूल्यांकन करें, मानों की सूची R हो
    • L में सभी मानों के माध्यम से लूप करें:
      • R में सभी मानों के माध्यम से लूप करें:
        • L और R में वर्तमान तत्व पर वर्तमान ऑपरेटर x लागू करें, और मूल्यांकन किए गए मानों को res में जोड़ें
  • 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++ प्रोग्राम: दिए गए सेट के सभी विशिष्ट उपसमुच्चय (subsets) ज्ञात करना

    यहां हम देखेंगे कि दिए गए सेट के सभी विशिष्ट उपसमुच्चय कैसे प्रदर्शित करें। इसलिए यदि सेट {1, 2, 3} है, तो उपसमुच्चय होंगे {}, {1}, {2}, {3}, {1, 2}, {2, 3}, {1, 3}, {1, 2, 3}। सभी उपसमुच्चयों के सेट को पावर सेट (power set) कहा जाता है। पावर सेट में 2n तत्व होते हैं। हम 0 से 2n (बहिष्कृत) तक लूप कर

  1. - C++ में दिए गए नंबर तक जुड़ने वाले सभी संयोजन ढूंढना

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

  1. - C++ प्रोग्राम: दिए गए नंबर लिस्ट के सभी संभावित कॉम्बिनेशन

    यह C++ प्रोग्राम दिए गए नंबरों की लिस्ट के सभी संभावित कॉम्बिनेशन (संयोजन) उत्पन्न करता है। यह पिछले आर्टिकल (ID: 1005082327) के समान है लेकिन विशेष रूप से नंबरों के लिए है। एल्गोरिदम reqLen तो लौटें - अन्यथा यदि currLen == reqLen तो नई जनरेटेड सीक्वेंस प्रिंट करें - यदि start == len तो