Print all Good numbers in given range - GeeksforGeeks

19 Nov, 2021
Given a digit ‘d’ and a range [L, R] where L < R, print all good numbers in given range that don’t contain digit ‘d’. A number is good if its every digit is larger than the sum of digits which are on the right side of that digit. For example 9620 is good number because 2 > 0, 6 > 2+0 and 9 > 6+2+0.
Example:  
Input:  L = 410, R = 520, d = 3
Output: 410 420 421 510 520 
All the numbers in output are good (every digit is more
than sum of digits on right of it) and don't have digit 3.

Input:  L = 410, R = 520, d = 1
Output: 420 430 520 
All the numbers in output are good (every digit is more
than sum of digits on right of it) and don't have digit 1.
The idea is to traverse all numbers in given range. For every number, traverse all digits. While traversing keep track of digit sum so far. At any point, if the previous sum becomes more than or equal to sum, return false. Also, if current digit becomes ‘d’, return false.
Below is the implementation of the idea. 
C++
Java
Python3
C#
PHP
Javascript
// C++ program to print good numbers in a given range [L, R]#include<bits/stdc++.h>using namespace std; // To check whether n is a good number and doesn't contain// digit 'd'.bool isValid(int n, int d){    // Get last digit and initialize sum from right side    int digit = n%10;    int sum = digit;     // If last digit is d, return    if (digit == d)    return false;     // Traverse remaining digits    n /= 10;    while (n)    {        // Current digit        digit = n%10;         // If digit is d or digit is less than or        // equal to sum of digits on right side        if (digit == d || digit <= sum)            return false;         // Update sum and n        else        {            sum += digit;            n /= 10;        }    }    return 1;} // Print Good numbers in range [L, R]void printGoodNumbers(int L, int R, int d){// Traverse all numbers in given rangefor (int i=L; i<=R; i++){    // If current numbers is good, print it.    if (isValid(i, d))        cout << i << " ";}} // Driver programint main(){    int L = 410, R = 520, d = 3;     // Print good numbers in [L, R]    printGoodNumbers(L, R, d);     return 0;}
// Java program to print good numbers in a given range [L, R]import java.io.*; class Numbers{    // Function to check whether n is a good number and doesn't contain    // digit 'd'    static boolean isValid(int n, int d)    {        // Get last digit and initialize sum from right side        int digit = n%10;        int sum = digit;         // If last digit is d, return        if (digit == d)        return false;         // Traverse remaining digits        n /= 10;        while (n>0)        {            // Current digit            digit = n%10;                 // If digit is d or digit is less than or            // equal to sum of digits on right side            if (digit == d || digit <= sum)                return false;             // Update sum and n                else                {                    sum += digit;                    n /= 10;                }        }    return true;    }         // Print Good numbers in range [L, R]    static void printGoodNumber(int L, int R, int d)    {        // Traverse all numbers in given range        for(int i=L;i<=R;i++)        {            // If current numbers is good, print it            if(isValid(i, d))                System.out.print(i+" ");        }    }         // Driver program    public static void main (String[] args)    {        int L = 410, R = 520, d = 3;                 // Print good numbers in [L, R]        printGoodNumber(L, R, d);    }}
# Python3 program to print good# numbers in a given range [L, R] # Function to check whether n is# a good number and doesn't contain# digit 'd'def isValid(n, d):         # Get last digit and initialize    # sum from right side    digit = n % 10;    sum = digit;     # If last digit is d, return    if (digit == d):        return False;     # Traverse remaining digits    n = int(n / 10);    while (n > 0):                 # Current digit        digit = n % 10;             # If digit is d or digit is        # less than or equal to sum        # of digits on right side        if(digit == d or digit <= sum):            return False;                     # Update sum and n        else:            sum += digit;            n = int(n / 10);    return True;     # Print Good numbers in range [L, R]def printGoodNumber(L, R, d):         # Traverse all numbers    # in given range    for i in range(L, R + 1):                 # If current numbers is good,        # print it        if(isValid(i, d)):            print(i, end = " ");     # Driver CodeL = 410;R = 520;d = 3;         # Print good numbers in [L, R]printGoodNumber(L, R, d); # This code is contributed by mits
// C# program to print good numbers in a// given range [L, R]using System; class GFG {         // Function to check whether n is a good    // number and doesn't contain digit 'd'    static bool isValid(int n, int d)    {                 // Get last digit and initialize        // sum from right side        int digit = n % 10;        int sum = digit;         // If last digit is d, return        if (digit == d)            return false;         // Traverse remaining digits        n /= 10;        while (n > 0)        {                         // Current digit            digit = n % 10;                 // If digit is d or digit is            // less than or equal to sum of            // digits on right side            if (digit == d || digit <= sum)                return false;             // Update sum and n            else            {                sum += digit;                n /= 10;            }        }             return true;    }         // Print Good numbers in range [L, R]    static void printGoodNumber(int L,                               int R, int d)    {                 // Traverse all numbers in given range        for(int i = L; i <= R; i++)        {                         // If current numbers is good,            // print it            if(isValid(i, d))                Console.Write(i+" ");        }    }         // Driver program    public static void Main ()    {        int L = 410, R = 520, d = 3;                 // Print good numbers in [L, R]        printGoodNumber(L, R, d);    }} //This code is contributed by vt_m.
<?php// PHP program to print good// numbers in a given range [L, R] // To check whether n is a good// number and doesn't contain digit 'd'.function isValid($n, $d){    // Get last digit and initialize    // sum from right side    $digit = $n % 10;    $sum = $digit;     // If last digit is d, return    if ($digit == $d)    return false;     // Traverse remaining digits    $n = (int)($n / 10);    while ($n)    {        // Current digit        $digit = $n % 10;         // If digit is d or digit is less        // than or equal to sum of digits        // on right side        if ($digit == $d || $digit <= $sum)            return false;         // Update sum and n        else        {            $sum += $digit;            $n = (int)($n / 10);        }    }    return 1;} // Print Good numbers in range [L, R]function printGoodNumbers($L, $R, $d){// Traverse all numbers in given rangefor ($i = $L; $i <= $R; $i++){    // If current numbers is good,    // print it.    if (isValid($i, $d))        echo $i . " ";}} // Driver Code$L = 410;$R = 520;$d = 3; // Print good numbers in [L, R]printGoodNumbers($L, $R, $d); // This code is contributed by mits?>
<script> // Javascript program to print good numbers// in a given range [L, R]class Numbers // Function to check whether n is a good// number and doesn't contain digit 'd'function isValid(n, d){         // Get last digit and initialize    // sum from right side    var digit = n % 10;    var sum = digit;     // If last digit is d, return    if (digit == d)        return false;     // Traverse remaining digits    n = parseInt(n / 10);    while (n > 0)    {                 // Current digit        digit = n%10;         // If digit is d or digit is less than or        // equal to sum of digits on right side        if (digit == d || digit <= sum)            return false;                     // Update sum and n        else        {            sum += digit;            n = parseInt(n / 10);        }    }    return true;} // Print Good numbers in range [L, R]function printGoodNumber(L, R, d){         // Traverse all numbers in given range    for(i = L; i <= R; i++)    {                 // If current numbers is good, print it        if (isValid(i, d))            document.write(i + " ");    }} // Driver codevar L = 410, R = 520, d = 3; // Print good numbers in [L, R]printGoodNumber(L, R, d); // This code is contributed by shikhasingrajput </script>
Output: 
 410 420 421 510 520 
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above 
Mithun Kumar
shikhasingrajput
ankita_saini
number-digits
series
Mathematical
Mathematical
series
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program to print prime numbers from 1 to N.
Segment Tree | Set 1 (Sum of given range)
Count all possible paths from top left to bottom right of a mXn matrix
Modular multiplicative inverse
Program to multiply two matrices
Fizz Buzz Implementation
Check if a number is Palindrome
Count ways to reach the n'th stair
Merge two sorted arrays with O(1) extra space
Min Cost Path | DP-6