কম্পিউটার

এক্সপ্রেশন C++ এ অপারেটর যোগ করুন


ধরুন আমাদের একটি স্ট্রিং আছে যেখানে শুধুমাত্র 0 থেকে 9 পর্যন্ত সংখ্যা রয়েছে। এবং একটি টার্গেট মান দেওয়া হয়েছে। বাইনারি অপারেটর +, - এবং * অঙ্কের মধ্যে টার্গেট মান পেতে আমাদের সমস্ত সম্ভাবনা ফেরত দিতে হবে। সুতরাং ইনপুট যদি হয় “232” এবং লক্ষ্য 8 হয়, তাহলে উত্তর হবে [“2*3+2”, “2+3*2”]

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • সমাধান() নামক একটি পদ্ধতি সংজ্ঞায়িত করুন, এটি সূচক, s, curr, লক্ষ্য, temp, mult-

    নেবে।
  • যদি idx>=s এর আকার হয়, তাহলে,

    • যদি লক্ষ্য curr এর মত হয়, তাহলে,

      • ret-এর শেষে temp সন্নিবেশ করুন

    • ফেরত

  • aux :=খালি স্ট্রিং

  • শুরু করার জন্য i :=idx, যখন i বাড়ান

    • aux =aux + s[i]

    • aux[0] যদি '0' এর মত হয় এবং aux> 1 এর আকার হয়, তাহলে,

      • পরবর্তী পুনরাবৃত্তি এড়িয়ে যান, নিম্নলিখিত অংশ উপেক্ষা করুন

    • যদি idx 0 এর মত হয়, তাহলে,

      • কল সমাধান

    • অন্যথায়

      • কল সমাধান (i + 1, s, curr + aux as integer, target, temp + " + " + aux, aux asinteger)

      • কল সমাধান (i + 1, s, curr - aux as integer, target, temp + " - " + aux, - aux asinteger)

      • কল সমাধান (i + 1, s, curr - mult + mult * aux পূর্ণসংখ্যা হিসাবে, লক্ষ্য, temp + "* " +aux, mult * aux পূর্ণসংখ্যা হিসাবে)

  • মূল পদ্ধতি থেকে কল সমাধান (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. C++ এ উদাহরণ সহ এক্সপ্রেশন ট্রি

  2. C++ এ এক্সপ্রেশন ট্রির মূল্যায়ন

  3. C++ এ রিলেশনাল অপারেটর

  4. C++ এ পাটিগণিত অপারেটর