Imprimir todos los buenos números en el rango dado

Dado un dígito ‘d’ y un rango [L, R] donde L < R, imprima todos los números correctos en el rango dado que no contengan el dígito ‘d’. Un número es bueno si todos sus dígitos son mayores que la suma de los dígitos que están en el lado derecho de ese dígito. Por ejemplo, 9620 es un buen número porque 2 > 0, 6 > 2+0 y 9 > 6+2+0.

Ejemplo:  

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.

La idea es recorrer todos los números en un rango dado. Para cada número, recorre todos los dígitos. Mientras atraviesa, realice un seguimiento de la suma de dígitos hasta el momento. En cualquier momento, si la suma anterior se vuelve mayor o igual que la suma, devuelve falso. Además, si el dígito actual se convierte en ‘d’, devuelve falso.

A continuación se muestra la implementación de la idea. 

C++

// 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 range
for (int i=L; i<=R; i++)
{
    // If current numbers is good, print it.
    if (isValid(i, d))
        cout << i << " ";
}
}
 
// Driver program
int main()
{
    int L = 410, R = 520, d = 3;
 
    // Print good numbers in [L, R]
    printGoodNumbers(L, R, d);
 
    return 0;
}

Java

// 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

# 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 Code
L = 410;
R = 520;
d = 3;
         
# Print good numbers in [L, R]
printGoodNumber(L, R, d);
 
# This code is contributed by mits

C#

// 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
// 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 range
for ($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
?>

Javascript

<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 code
var L = 410, R = 520, d = 3;
 
// Print good numbers in [L, R]
printGoodNumber(L, R, d);
 
// This code is contributed by shikhasingrajput
 
</script>

Producción: 

 410 420 421 510 520 

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *