📜  打印给定范围内的所有良好编号

📅  最后修改于: 2021-05-04 23:33:37             🧑  作者: Mango

给定一个数字“ d”和一个范围[L,R],其中L 0、6> 2 + 0和9> 6 + 2 + 0。

例子:

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.

想法是遍历给定范围内的所有数字。对于每个数字,遍历所有数字。遍历时一直跟踪数字总和。在任何时候,如果先前的总和大于或等于总和,则返回false。另外,如果当前数字变为“ d”,则返回false。

以下是该想法的实现。

C++
// C++ program to print good numbers in a given range [L, R]
#include
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


Javascript


输出:

410 420 421 510 520