使用 C++ 列印所有小於 N 且最多有 2 個唯一數字的數字


此問題給定了一個整數 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

更新於: 2020-01-22

133 次瀏覽

啟動您的職業生涯

完成課程並獲得認證

開始
本頁面中有廣告