কম্পিউটার

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

    • L:

      -এ সমস্ত মান লুপ করুন
      • R−

        -এ সমস্ত মান লুপ করুন
        • L এবং R-এ বর্তমান উপাদানের উপর বর্তমান অপারেটর x প্রয়োগ করুন, এবং মূল্যায়ন করা মানগুলিকে রেজেক্টে যোগ করুন

  • আউটপুট হিসাবে রেস রিটার্ন করুন

উদাহরণ

#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++ এ সমান্তরালগ্রামের সম্ভাব্য সব স্থানাঙ্ক খুঁজুন

  2. C++ এ প্রদত্ত সেটের সমস্ত স্বতন্ত্র উপসেট খুঁজুন

  3. C++ ব্যবহার করে প্রদত্ত সংখ্যা পর্যন্ত যোগ করে এমন সমস্ত সমন্বয় খুঁজুন

  4. একটি প্রদত্ত সংখ্যার তালিকার সমস্ত সম্ভাব্য সংমিশ্রণ তৈরি করতে C++ প্রোগ্রাম