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

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


ในปัญหานี้ เราได้รับจำนวนเต็ม 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