在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递归生成数字。在此过程中可能会出现一些重复的数字。因此,我们可以使用set来存储数字以避免它。

示例

该程序显示了我们解决问题的方法的实施

#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