इस समस्या में, हमें एक पूर्णांक N दिया गया है और हमें N से छोटी उन सभी संख्याओं को प्रिंट करना है जिनमें अधिकतम 2 अद्वितीय अंक हों यानी संख्या बनाने के लिए अधिकतम 2 अलग-अलग अंकों का उपयोग किया जा सकता है।
उदाहरण
Input: N = 17 Output: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
इस समस्या को हल करने के लिए, हम उन सभी संख्याओं को जनरेट करेंगे जिनमें केवल दो अद्वितीय अंक हों। हमारी संख्या जनरेट करने की प्रक्रिया 0 से शुरू होती है और तब समाप्त होती है जब हमारी संख्या N के बराबर या उससे बड़ी हो जाती है। दो अद्वितीय अंक चुने जाने के लिए, num*10+i और num*10+j का उपयोग करके रिकर्सिवली संख्याएं जनरेट करें। इस प्रक्रिया में कुछ डुप्लिकेट संख्याएं उत्पन्न हो सकती हैं। इसलिए, हम संख्याओं को संग्रहीत करने के लिए सेट का उपयोग कर सकते हैं ताकि डुप्लिकेट से बचा जा सके।
उदाहरण
यह प्रोग्राम समस्या को हल करने के हमारे दृष्टिकोण का कार्यान्वयन दिखाता है:
#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