ধরুন আমাদের দুটি পূর্ণসংখ্যা N এবং M আছে। প্রদত্ত ক্রিয়াকলাপ সম্পাদন করে N থেকে M-এ পৌঁছানোর জন্য আমাদের ন্যূনতম সংখ্যক ধাপ খুঁজে বের করতে হবে -
- সংখ্যা x কে 2 দ্বারা গুণ করুন, তাহলে x হবে 2*x
- সংখ্যা x থেকে একটি বিয়োগ করুন, তাহলে সংখ্যাটি হবে x – 1
যদি N =4 এবং M =6 হয়, তাহলে আউটপুট হবে 2। সুতরাং যদি আমরা N-তে 2 নম্বর অপারেশন করি, তাহলে N হবে 3, তারপর N-এর আপডেটেড মানের উপর এক নম্বর অপারেশন সম্পাদন করুন, সুতরাং এটি 2 * 3 =6 হবে। সুতরাং পদক্ষেপের সর্বনিম্ন সংখ্যা হবে 2।
এই সমস্যা সমাধানের জন্য, আমরা এই নিয়মগুলি অনুসরণ করব -
- আমরা সমস্যাটি বিপরীত করতে পারি, যেমন আমরা N সংখ্যাটি M থেকে শুরু করে নিই, তাই নতুন দুটি অপারেশন হবে
-
- সংখ্যাটিকে 2 দ্বারা ভাগ করুন, যখন এটি জোড় হয়,
- সংখ্যার সাথে 1 যোগ করুন
- এখন অপারেশনের সর্বনিম্ন সংখ্যা হবে
- যদি N> M, তাদের মধ্যে পার্থক্য ফেরত দিন, তাই ধাপের সংখ্যা M-এর সাথে 1 যোগ করা হবে, যতক্ষণ না এটি N-এর সমান হয়
- অন্যথায় যখন N
উদাহরণ
#include<iostream> using namespace std; int countMinimumSteps(int n, int m) { int count = 0; while(m > n) { if(m % 2 == 1) { m++; count++; } m /= 2; count++; } return count + n - m; } int main() { int n = 4, m = 6; cout << "Minimum number of operations required: " << countMinimumSteps(n, m); }
আউটপুট
Minimum number of operations required: 2