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

C++ में एक्सप्रेशन ऐड ऑपरेटर्स

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

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

  • हल () नामक एक विधि को परिभाषित करें, यह अनुक्रमणिका, एस, वक्र, लक्ष्य, अस्थायी, बहु-

    लेगा
  • अगर idx>=s का आकार, तो,

    • यदि लक्ष्य कर्व के समान है, तो,

      • रिट के अंत में अस्थायी डालें

    • वापसी

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

  • i :=idx को इनिशियलाइज़ करने के लिए, जब i

    • ऑक्स =ऑक्स + एस[i]

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

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

    • अगर idx 0 के समान है, तो,

      • कॉल हल करें (i + 1, s, aux पूर्णांक के रूप में, लक्ष्य, aux, aux पूर्णांक के रूप में)

    • अन्यथा

      • कॉल सॉल्व (i + 1, s, curr + aux पूर्णांक के रूप में, लक्ष्य, अस्थायी + "+" + aux, aux asinteger)

      • कॉल हल (i + 1, s, curr - aux पूर्णांक के रूप में, लक्ष्य, temp + "-" + aux, - aux asinteger)

      • कॉल हल करें (i + 1, s, curr - बहु + बहु * औक्स पूर्णांक के रूप में, लक्ष्य, अस्थायी + "*" + ऑक्स, बहु * औक्स पूर्णांक के रूप में)

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

  • वापसी रिट

उदाहरण

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

#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. सी ++ में उदाहरण के साथ अभिव्यक्ति वृक्ष

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

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

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

  1. C++ . में अंकगणित संचालिका

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