এই সমস্যায় একটি পূর্ণসংখ্যা N দেওয়া আছে। আমাদের N থেকে ছোট সব সংখ্যা প্রিন্ট করতে হবে যাতে শুধু ২টি স্বতন্ত্র অঙ্ক থাকে অর্থাৎ সর্বোচ্চ ২টি ভিন্ন অঙ্ক ব্যবহার করে সংখ্যা তৈরি করা হবে।
উদাহরণ
ইনপুট: N = 17 আউটপুট: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
এই সমস্যাটি সমাধানের জন্য শুধু দুটি স্বতন্ত্র অঙ্ক বিশিষ্ট সব সংখ্যা তৈরি করতে হবে। সংখ্যা তৈরির প্রক্রিয়া ০ থেকে শুরু হবে এবং যখন সংখ্যাটি N-এর সমান বা বড় হবে তখন থামবে। দুটি নির্বাচিত অঙ্কের জন্য রিকার্সিভলি num*10+i এবং num*10+j দিয়ে সংখ্যা তৈরি করা হবে। এই প্রক্রিয়ায় কিছু ডুপ্লিকেট সংখ্যা তৈরি হতে পারে। তাই set ব্যবহার করা হবে ডুপ্লিকেট এড়াতে।
বাস্তবায়ন
#include <bits/stdc++.h>
using namespace std;
set<int> numbers;
void generateNumbers(int n, int num, int i, int j) {
if (num > 0 && num < n)
numbers.insert(num);
if (num >= n)
return;
if (num * 10 + i > num)
generateNumbers(n, num * 10 + i, i, j);
generateNumbers(n, num * 10 + j, i, j);
}
void printUniqueBitNumber(int n) {
for (int i = 0; i <= 9; i++)
for (int j = i + 1; j <= 9; j++)
generateNumbers(n, 0, i, j);
cout << "The numbers are generated are : ";
while (!numbers.empty()) {
cout << *numbers.begin() << " ";
numbers.erase(numbers.begin());
}
}
int main() {
int n = 17;
printUniqueBitNumber(n);
return 0;
}
আউটপুট
The numbers are generated are : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16