ইনপুট হিসাবে একটি পূর্ণসংখ্যা সংখ্যা দেওয়া হয়েছে। লক্ষ্য হল ইনপুট সংখ্যা 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