এই সমস্যায় একটি সংখ্যা n দেওয়া আছে। আমাদের n-এর চেয়ে কম সবচেয়ে বড় সংখ্যা প্রিন্ট করতে হবে যার সব অঙ্ক ভিন্ন হবে।
উদাহরণ
ইনপুট: n = 2332 আউটপুট: 2319
এই সমস্যাটি সমাধানের জন্য সংখ্যাগুলো উল্টো ক্রমে গণনা করা হবে (n থেকে 0 পর্যন্ত)। প্রতিটি সংখ্যা চেক করা হবে তার অঙ্কগুলো ভিন্ন কিনা। যদি শর্ত পূরণ করে, তবে সেটি প্রিন্ট করে লুপ শেষ করা হবে। লুপটি সর্বোচ্চ n বার চলবে।
বাস্তবায়ন
#include <bits/stdc++.h>
using namespace std;
int findDistinctDigitNumber(int n) {
for (int i = n - 1; i >= 0; i--) {
int count[10] = { 0 };
int x = i;
int count1 = 0, count2 = 0;
while (x) {
count[x % 10]++;
x /= 10;
count1++;
}
for (int j = 0; j < 10; j++) {
if (count[j] == 1)
count2++;
}
if (count1 == count2)
return i;
}
return -1;
}
int main() {
int n = 44324;
cout << "Number less than " << n << " with all digits distinct are : " << findDistinctDigitNumber(n);
return 0;
}
আউটপুট
Number less than 44324 with all digits distinct are : 43987