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

พิมพ์ Jumping Numbers ทั้งหมดที่น้อยกว่าหรือเท่ากับค่าที่กำหนดใน C++


ในปัญหานี้ เราได้ตัวเลข n และต้องพิมพ์ตัวเลขกระโดดทั้งหมดที่น้อยกว่าหรือเท่ากับ n

กระโดดตัวเลข คือตัวเลขที่มีตัวเลขติดกันต่างกันเพียงตัวเดียว ตัวเลขกระโดดบางตัวคือ 4565, 98, 7 ตัวเลขหลักเดียวทั้งหมดถือเป็นตัวเลขกระโดด 235 ไม่ใช่ตัวเลขกระโดด

ตอนนี้ มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

Input: N = 32
Output: 0 1 2 3 4 5 6 7 8 9 10 12 21 23 32

ในการแก้ปัญหานี้ เราจะสมมติกราฟโดยที่ 0 เป็นโหนดเริ่มต้น และข้ามไปยังโหนดที่เข้าถึงได้ทั้งหมด คุณสามารถสำรวจได้โดยใช้ BFS หรือ DFS . กราฟนี้สร้างขึ้นโดยใช้เงื่อนไขที่ทำให้ค่าเป็นตัวเลขกระโดด

ตัวอย่าง

รหัสด้านล่างใช้โซลูชันของเรา -

#include <bits/stdc++.h>
using namespace std;
void traverse(int N, int num) {
   queue<int> q;
   q.push(num);
   while (!q.empty()) {
      num = q.front();
      q.pop();
      if (num <= N) {
         cout << num << " ";
         int last_dig = num % 10;
         if (last_dig == 0)
            q.push((num * 10) + (last_dig + 1));
         else if (last_dig == 9)
            q.push((num * 10) + (last_dig - 1));
         else {
            q.push((num * 10) + (last_dig - 1));
            q.push((num * 10) + (last_dig + 1));
         }
      }
   }
}
void printJumpingNumber(int N) {
   cout<<0<<" ";
   for (int i = 1; i <= 9 && i <= N; i++)
   traverse(N, i);
}
int main() {
   int N = 54;
   cout<<"Jumping Numbers less than "<<N<<" are :\n";
   printJumpingNumber(N);
   return 0;
}

ผลลัพธ์

Jumping Numbers less than 54 are −
0 1 10 12 2 21 23 3 32 34 4 43 45 5 54 6 7 8 9