Trong bài toán này, chúng ta được cho một số nguyên N và chúng ta đã in ra tất cả các số nhỏ hơn N có tối đa 2 chữ số duy nhất, tức là có thể sử dụng tối đa 2 chữ số khác nhau để tạo ra số .
Hãy lấy một ví dụ để hiểu vấn đề -
Input: N = 17 Output: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Để giải quyết vấn đề này, chúng tôi sẽ tạo ra tất cả các số chỉ có hai chữ số duy nhất. Quá trình tạo số của chúng tôi bắt đầu từ 0 và kết thúc khi số của chúng tôi bằng hoặc lớn hơn N. Đối với hai số được chọn duy nhất, hãy tạo đệ quy các số bằng cách sử dụng num * 10 + i và num * 10 + j . Có thể phát sinh một số con số trùng lặp trong quá trình này. Vì vậy, chúng ta có thể sử dụng set để lưu trữ các số để tránh nó.
Ví dụ
Chương trình này cho thấy việc triển khai phương pháp tiếp cận của chúng tôi để giải quyết vấn đề
#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; }
Đầu ra
The numbers are generated are : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16