Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

พิมพ์ตัวเลขน้อยกว่า N ที่มีหลักไม่เกิน 2 ตัวที่ไม่ซ้ำใน C++

ภาพรวมปัญหา

ได้รับ 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)

  1. เลือกคู่ตัวเลข (i, j) โดย i < j
  2. Recursive สร้างตัวเลขด้วย i และ j: num*10+i, num*10+j
  3. เก็บใน 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