ภาพรวมปัญหา
ได้รับ N ต้องพิมพ์ตัวเลข < N ที่ใช้หลักได้สูงสุด 2 ตัวที่ไม่ซ้ำกัน
ตัวอย่าง
Input: N = 17 Output: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
วิธีแก้ปัญหา (Recursion + Set)
- เลือกคู่ตัวเลข (i, j) โดย i < j
- Recursive สร้างตัวเลขด้วย i และ j: num*10+i, num*10+j
- เก็บใน Set กรองซ้ำและเรียง
ตัวอย่างโค้ด C++
#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;
}
ผลลัพธ์ (Output)
The numbers are generated are: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16