কম্পিউটার

C++ এ সংখ্যা প্রকাশ করতে সর্বনিম্ন অপারেটর


ধরুন আমাদের একটি ধনাত্মক পূর্ণসংখ্যা x আছে, আমরা x (op1) x (op2) x (op3) x... যেখানে op1, op2 ইত্যাদি অপারেটর হবে তার একটি এক্সপ্রেশন লিখব। এবং এই অপারেটরগুলি যোগ, বিয়োগ, গুণ বা ভাগ হতে পারে। উদাহরণস্বরূপ, x =3 দিয়ে, আমরা 3 * 3 / 3 + 3 - 3 লিখতে পারি যা 3 এর মান। কিছু কিছু নিয়ম আছে, সেগুলি নিম্নরূপ -

  • বিভাগ অপারেটর (/) মূলদ সংখ্যা প্রদান করে।

  • কোথাও কোন বন্ধনী রাখা নেই।

  • আমরা ক্রিয়াকলাপের স্বাভাবিক ক্রম ব্যবহার করি - যোগ এবং বিয়োগের চেয়ে গুণ এবং ভাগের অগ্রাধিকার বেশি।

  • Unary negation অপারেটর অনুমোদিত নয়৷

আমাদের সর্বনিম্ন সংখ্যক অপারেটর সহ একটি অভিব্যক্তি লিখতে হবে যাতে অভিব্যক্তিটি প্রদত্ত লক্ষ্যের সমান হয়। সুতরাং, আমরা সর্বনিম্ন সংখ্যক অপারেটর খুঁজে পাব।

সুতরাং, ইনপুট যদি x =4, টার্গেট =15 এর মত হয়, তাহলে আউটপুট হবে 3, যেমন আমরা 15 কে 4*4- 4/4 হিসাবে প্রকাশ করতে পারি

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

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

    • যদি x> টার্গেট হয়, তাহলে −

      • সর্বনিম্ন ফেরত দিন (x - লক্ষ্য) * 2 এবং (লক্ষ্য * 2) - 1

  • যোগফল :=x, t :=0

  • সমষ্টি করার সময়

    • যোগফল :=যোগফল * x

    • (t 1 দ্বারা বাড়ান)

  • যদি যোগফল টার্গেটের সমান হয়, তাহলে −

    • টি

      ফেরত দিন
  • l :=inf, r :=inf

  • যদি যোগফল - লক্ষ্য লক্ষ্য, তারপর −

    • r :=leastOpsExpressTarget(x, sum - target)

  • l :=leastOpsExpressTarget(x, target - (sum/x))

  • 1 + সর্বনিম্ন l এবং r

    ফেরত দিন

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
   public:
   int leastOpsExpressTarget(int x, int target) {
      if(target == x) return 0;
      if(x > target){
         return min((x - target) * 2, (target * 2) - 1);
      }
      lli sum = x;
      int t = 0;
      while(sum < target){
         sum *= x;
         t++;
      }
      if(sum == target) return t;
      int l = INT_MAX;
      int r = INT_MAX;
      if(sum - target < target){
         r = leastOpsExpressTarget(x, sum - target) + t;
      }
      l = leastOpsExpressTarget(x, target - (sum / x)) + t - 1;
      return min(l, r) + 1;
   }
};
main(){
   Solution ob;
   cout << (ob.leastOpsExpressTarget(4, 15));
}

ইনপুট

4, 15

আউটপুট

3

  1. C++ এ মিতব্যয়ী নম্বর

  2. C++ পেন্টাটোপ নম্বর

  3. C++ এ একটি সংখ্যার ন্যূনতম উল্লেখযোগ্য বিট Kth প্রিন্ট করুন

  4. C++ এ অ্যারেতে সবচেয়ে কাছের নম্বর খুঁজুন