ইনপুট হিসাবে একটি পূর্ণসংখ্যা সংখ্যা দেওয়া হয়েছে। লক্ষ্য হল ইনপুট সংখ্যা 1 এ কমাতে প্রয়োজনীয় পদক্ষেপ বা অপারেশনের ন্যূনতম সংখ্যা খুঁজে পাওয়া।
-
যদি সংখ্যাটি জোড় হয়, তাহলে এটিকে 2 দ্বারা ভাগ করুন।
-
যদি সংখ্যাটি বিজোড় হয়, তাহলে এটি 1 দ্বারা বৃদ্ধি বা হ্রাস করুন।
উদাহরণ
ইনপুট − সংখ্যা=২৮
আউটপুট − 28 থেকে 1:6 কমানোর সর্বনিম্ন পদক্ষেপ
ব্যাখ্যা −
28 হল জোড় - 2 =14 দিয়ে ভাগ করুন
14 হল জোড় - 2 =7 দিয়ে ভাগ করুন
7 বিজোড় - 1 =8 দ্বারা বৃদ্ধি
8 হল জোড় - 2 =4 দিয়ে ভাগ করুন
4 হল জোড় - 2 =2 দ্বারা ভাগ করুন
2 হল জোড় - 2 =1
দিয়ে ভাগ করুনইনপুট - সংখ্যা=9
আউটপুট − 9 থেকে 1 কমাতে সর্বনিম্ন পদক্ষেপ:4
ব্যাখ্যা −
9 হল বিজোড় - 1 =8 দ্বারা হ্রাস
8 হল জোড় - 2 =4 দিয়ে ভাগ করুন
4 হল জোড় - 2 =2 দ্বারা ভাগ করুন
2 হল জোড় - 2 =1
দিয়ে ভাগ করুননিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
এই পদ্ধতিতে সংখ্যা 1 এ কমাতে প্রয়োজনীয় ন্যূনতম ক্রিয়াকলাপগুলি পরীক্ষা করার জন্য একটি পুনরাবৃত্ত পদ্ধতি ব্যবহার করুন। যদি এটি এমনকি 2 দ্বারা ভাগ করা হয় তবে নম্বর+1 বা নম্বর-1-এর জন্য ন্যূনতম উপায়গুলির জন্য পুনরাবৃত্তিমূলকভাবে চেক করুন, যেটি কম।
-
পূর্ণসংখ্যা হিসাবে ইনপুট নম্বর নিন।
-
ফাংশন minWays(int num) num কে ইনপুট হিসাবে নেয় এবং num 1 এ কমাতে প্রয়োজনীয় ন্যূনতম অপারেশনের গণনা প্রদান করে।
-
পূর্ণসংখ্যা হিসাবে tmp1, tmp2 এবং min ভেরিয়েবল নিন।
-
যদি সংখ্যা 0 হয় তবে 1 ফেরত দিন।
-
যদি num%2==0 হয়, তাহলে সেটা num=num/2
সেট করুন -
সংখ্যা বিজোড় হলে tmp1=minWays(num-1) এবং tmp2=minWays(num+1) সেট করুন।
-
সেট মিন হল ন্যূনতম tmp1 এবং tmp2।
-
1+মিনিট রিটার্ন করুন।
-
শেষে আমরা কাঙ্খিত ফলাফল পাব।
-
প্রধান ফলাফল প্রিন্ট করুন.
উদাহরণ
#include <iostream> using namespace std; int minWays(int num){ int tmp1,tmp2,min; if (num == 1){ return 0; } else if (num % 2 == 0){ tmp1=minWays(num/2); return (1 + tmp1); } else{ int tmp1=minWays(num - 1); int tmp2=minWays(num + 1); int min=tmp1<tmp2?tmp1:tmp2; return (1 + min); } } int main(){ int Number = 21; cout <<"Minimum steps to reduce "<<Number<<" to 1: "<<minWays(Number); return 0; }
আউটপুট
যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট তৈরি করবে
Minimum steps to reduce 21 to 1: 6