在 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
广告