এই সমস্যায়, আমাদের একটি উপাদান N দেওয়া হয়েছে। আমাদের একই সংখ্যার সেট সহ পরবর্তী বৃহত্তর সংখ্যাটি খুঁজে বের করতে হবে। আমাদের একই অঙ্কের ক্ষুদ্রতম সংখ্যাটি খুঁজে বের করতে হবে যা N এর চেয়ে বড়।
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,
ইনপুট
N = "92534"
আউটপুট
92543
সমাধান পদ্ধতি
পরবর্তী বৃহত্তর উপাদানটি খুঁজে পেতে সমস্যার একটি সহজ সমাধান হল নিম্নলিখিত পদ্ধতি -
-
সংখ্যাটিকে সর্বনিম্ন উল্লেখযোগ্য বিট থেকে সর্বাধিক উল্লেখযোগ্য বিটে অতিক্রম করুন৷ এবং যখন বর্তমান উপাদানটি শেষ উপাদানের চেয়ে ছোট হয় তখন থামুন৷
-
এই পরে অবশিষ্ট অ্যারের ক্ষুদ্রতম উপাদান জন্য অনুসন্ধান. এবং সবচেয়ে ছোট সংখ্যাটি খুঁজুন এবং সংখ্যার সাথে এটি অদলবদল করুন।
-
তারপর অবশিষ্ট সাবয়ারে সাজান এবং আউটপুট ফেরত দিন।
আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,
উদাহরণ
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
void findNextGreater(char number[], int n) {
int i, j;
for (i = n-1; i > 0; i--)
if (number[i] > number[i-1])
break;
if (i==0) {
cout<<"Next number is not possible";
return;
}
int x = number[i-1], smallest = i;
for (j = i+1; j < n; j++)
if (number[j] > x && number[j] < number[smallest])
smallest = j;
char temp = number[smallest];
number[smallest] = number[i-1];
number[i-1] = temp;
sort(number + i, number + n);
cout<<number;
return;
}
int main(){
char number[] = "92534";
int n = strlen(number);
cout<<"The next number with same set of digits is ";
findNextGreater(number, n);
return 0;
} আউটপুট
The next number with same set of digits is 92543