给定一个整数N ,任务是打印所有数字≤N ,这些数字的位数只有1或3 。
例子:
Input: N = 10
Output: 3 1
Input: N = 20
Output: 13 11 3 1
方法:
- 首先检查该数字是否大于0。如果是,则继续操作,否则程序终止。
- 检查数字的每个位置是否存在数字1或3。
- 如果我们在数字的每个位置都找到1或3,则打印数字。现在,使用递归调用来检查下一个数字,该数字比当前数字小一。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Recursive function to print the desired numbers
void printNumbers(int N)
{
// Bool variable to track whether each digit of
// the number fulfills the given condition
bool flag = 1;
// Creating a copy of the number
int x = N;
// Checking if the number has a positive value
if (N > 0) {
// Loop to iterate through digits
// of the number until every digit
// fulfills the given condition
while (x > 0 && flag == 1) {
// Get last digit
int digit = x % 10;
// Updating value of flag to be 0 if
// the digit is neither 1 nor 3
if (digit != 1 && digit != 3)
flag = 0;
// Eliminate last digit
x = x / 10;
}
// If N consists of digits 1 or 3 only
if (flag == 1)
cout << N << " ";
// Recursive call for the next number
printNumbers(N - 1);
}
}
// Driver code
int main()
{
int N = 20;
printNumbers(N);
return 0;
}
Java
// Java implementation of the above approach
class GFG
{
// Recursive function to print the desired numbers
static void printNumbers(int N)
{
// flag variable to track whether each digit of
// the number fulfills the given condition
int flag = 1;
// Creating a copy of the number
int x = N;
// Checking if the number has a positive value
if (N > 0)
{
// Loop to iterate through digits
// of the number until every digit
// fulfills the given condition
while (x > 0 && flag == 1)
{
// Get last digit
int digit = x % 10;
// Updating value of flag to be 0 if
// the digit is neither 1 nor 3
if (digit != 1 && digit != 3)
{
flag = 0;
}
// Eliminate last digit
x = x / 10;
}
// If N consists of digits 1 or 3 only
if (flag == 1) {
System.out.print(N + " ");
}
// Recursive call for the next number
printNumbers(N - 1);
}
}
// Driver code
public static void main(String[] args)
{
int N = 20;
printNumbers(N);
}
}
// This code is contributed by PrinciRaj1992
Python3
# Python 3 implementation of the approach
# Recursive function to print the
# desired numbers
def printNumbers(N):
# Bool variable to track whether each digit
# of the number fulfills the given condition
flag = 1
# Creating a copy of the number
x = N
# Checking if the number has a
# positive value
if (N > 0):
# Loop to iterate through digits
# of the number until every digit
# fulfills the given condition
while (x > 0 and flag == 1):
# Get last digit
digit = x % 10
# Updating value of flag to be 0 if
# the digit is neither 1 nor 3
if (digit != 1 and digit != 3):
flag = 0
# Eliminate last digit
x = x // 10
# If N consists of digits 1 or 3 only
if (flag == 1):
print(N, end = " ")
# Recursive call for the next number
printNumbers(N - 1)
# Driver code
if __name__ == '__main__':
N = 20
printNumbers(N)
# This code is contributed by
# Surendra_Gangwar
C#
// C# implementation of the above approach
using System;
class GFG
{
// Recursive function to print the desired numbers
static void printNumbers(int N)
{
// flag variable to track whether each digit of
// the number fulfills the given condition
int flag = 1;
// Creating a copy of the number
int x = N;
// Checking if the number has a positive value
if (N > 0)
{
// Loop to iterate through digits
// of the number until every digit
// fulfills the given condition
while (x > 0 && flag == 1)
{
// Get last digit
int digit = x % 10;
// Updating value of flag to be 0 if
// the digit is neither 1 nor 3
if (digit != 1 && digit != 3)
flag = 0;
// Eliminate last digit
x = x / 10;
}
// If N consists of digits 1 or 3 only
if (flag == 1)
Console.Write(N + " ");
// Recursive call for the next number
printNumbers(N - 1);
}
}
// Driver code
public static void Main()
{
int N = 20;
printNumbers(N);
}
}
// This code is contributed by Ryuga
PHP
0)
{
// Loop to iterate through digits
// of the number until every digit
// fulfills the given condition
while ((int)$x > 0 && $flag == 1)
{
// Get last digit
$digit = $x % 10;
// Updating value of flag to be 0
// if the digit is neither 1 nor 3
if ($digit != 1 && $digit != 3)
$flag = 0;
// Eliminate last digit
$x = $x / 10;
}
// If N consists of digits 1 or 3 only
if ($flag == 1)
{
echo $N ;
echo " ";
}
// Recursive call for the next number
printNumbers($N - 1);
}
}
// Driver code
$N = 20;
printNumbers($N);
// This code is contributed
// by Arnab Kundu
?>
输出:
13 11 3 1
请注意,本文旨在解释递归解决方案的想法是存在一种更好的方法来解决此问题。我们可以使用队列来有效地解决此问题。有关有效方法的详细信息,请参考小于N的二进制数字计数。
想要从精选的最佳视频中学习并解决问题,请查看有关从基础到高级C++的C++基础课程以及有关语言和STL的C++ STL课程。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。