এই সমস্যায়, আমাদের একটি এলিমেন্ট 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;
// ডান পাশে x-এর চেয়ে বড় সবচেয়ে ছোট ডিজিট খুঁজুন
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