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

C++ में अभिव्यक्ति में ऑपरेटर जोड़ें


मान लीजिए हमारे पास एक स्ट्रिंग है जिसमें केवल 0 से 9 तक के अंक हैं। और एक लक्ष्य मान दिया गया है। हमें बाइनरी ऑपरेटर +, - और * को अंकों में जोड़ने की सभी संभावनाएं लौटानी हैं ताकि लक्ष्य मान प्राप्त हो सके। तो यदि इनपुट "232" जैसा है और लक्ष्य 8 है, तो उत्तर ["2*3+2", "2+3*2"] होगा।

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

  • एक विधि solve() परिभाषित करें, जो इंडेक्स, s, curr, target, temp, mult लेगी -

  • यदि idx >= s का आकार, तो,

    • यदि target, curr के समान है, तो,

      • temp को ret के अंत में डालें

    • लौटें

  • aux := खाली स्ट्रिंग

  • i := idx से आरंभ करें, जब i < s का आकार, i को 1 से बढ़ाएं करें -

    • aux = aux + s[i]

    • यदि aux[0] '0' के समान है और aux का आकार > 1, तो,

      • निम्न भाग को अनदेखा करें, अगले पुनरावृत्ति पर जाएं

    • यदि idx, 0 के समान है, तो,

      • solve(i + 1, s, aux को पूर्णांक के रूप में, target, aux, aux को पूर्णांक के रूप में) को कॉल करें

    • अन्यथा

      • solve(i + 1, s, curr + aux को पूर्णांक के रूप में, target, temp + " + " + aux, aux को पूर्णांक के रूप में) को कॉल करें

      • solve(i + 1, s, curr - aux को पूर्णांक के रूप में, target, temp + " - " + aux, - aux को पूर्णांक के रूप में) को कॉल करें

      • solve(i + 1, s, curr - mult + mult * aux को पूर्णांक के रूप में, target, temp + " * " + aux, mult * aux को पूर्णांक के रूप में) को कॉल करें

  • मुख्य विधि से solve(0, num, 0, target, खाली स्ट्रिंग, 0) को कॉल करें

  • ret लौटाएं

उदाहरण

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){    cout << "[";    for(int i = 0; i<v.size(); i++){       cout << v[i] << ", ";    }    cout << "]"<<endl; } typedef long long int lli; class Solution {    public:    vector <string> ret;    void solve(int idx, string s, lli curr, lli target, string temp, lli mult){       //cout << temp << " " << curr << endl;       if(idx >= s.size()){          if(target == curr){             ret.push_back(temp);          }          return;       }       string aux = "";       for(int i = idx; i < s.size(); i++){          aux += s[i];          if(aux[0] == '0' && aux.size() > 1) continue;          if(idx == 0){             solve(i + 1, s, stol(aux), target, aux, stol(aux));          } else {             solve(i + 1, s, curr + stol(aux), target, temp + "+" + aux, stol(aux));             solve(i + 1, s, curr - stol(aux), target, temp + "-" + aux, -stol(aux));             solve(i + 1, s, curr - mult + mult * stol(aux), target, temp + "*" + aux, mult * stol(aux));          }       }    }    vector<string> addOperators(string num, int target) {       solve(0, num, 0, target, "", 0);       return ret;    } }; main(){    Solution ob;    print_vector(ob.addOperators("232", 8)); }

इनपुट

"232", 8

आउटपुट

[2+3*2, 2*3+2, ]

  1. C++ में उदाहरण के साथ एक्सप्रेशन ट्री C++ में उदाहरण के साथ एक्सप्रेशन ट्री

    एक एक्सप्रेशन ट्री एक विशेष प्रकार का बाइनरी ट्री है जिसमें ट्री का प्रत्येक नोड या तो एक ऑपरेटर या ऑपरेंड से बना होता है। लीफ नोड्स ट्री के एक ऑपरेंड को दर्शाते हैं। नॉन-लीफ नोड्स ट्री के एक ऑपरेटर को दर्शाते हैं। उदाहरण: इनफिक्स एक्सप्रेशन प्राप्त करने के लिए जिसे आसानी से हल किया जा सकता है, हम

  1. C++ में एक्सप्रेशन ट्री का मूल्यांकन C++ में एक्सप्रेशन ट्री का मूल्यांकन

    इस समस्या में, हमें एक एक्सप्रेशन ट्री दिया गया है जिसमें +, -, /, * जैसे बाइनरी ऑपरेशन होते हैं। हमें इस एक्सप्रेशन ट्री का मूल्यांकन करके परिणाम वापस करना होता है। एक्सप्रेशन ट्री क्या है? एक्सप्रेशन ट्री एक विशेष प्रकार का बाइनरी ट्री है जिसमें प्रत्येक नोड या तो एक ऑपरेटर होता है या एक ऑपरेंड,

  1. - C++ में अंकगणितीय ऑपरेटर्स

    C++ में 5 बुनियादी अंकगणितीय ऑपरेटर्स होते हैं। वे हैं: जोड़ (+) घटाव (-) भाग (/) गुणा (*) मॉड्यूलो (%) उदाहरण ये ऑपरेटर्स C++ में किसी भी अंकगणितीय संक्रिया पर कार्य कर सकते हैं। आइए एक उदाहरण देखते हैं: #include <iostream> using namespace std; int main() { int a = 21; int b = 10;