📜  打印一个严格小于给定数字的数字,以便其所有数字都是唯一的。

📅  最后修改于: 2021-04-29 14:46:01             🧑  作者: Mango

给定正数n,请打印一个小于n的数字,以便其所有数字都不同。
例子:

Input : 1134
Output : 1098
1098  is the largest number smaller than
1134 such that all digits are distinct.

Input : 4559
Output : 4539

使用计数可以轻松解决该问题。首先,循环访问小于n的数字,并使用count数组为每个数字计数数字的频率。如果所有数字仅出现一次,我们将打印该数字。答案始终存在,因此没有无限循环的问题。

C++
// CPP program to find a number less than
// n such that all its digits are distinct
#include 
using namespace std;
 
// Function to find a number less than
// n such that all its digits are distinct
int findNumber(int n)
{
    // looping through numbers less than n
    for (int i = n - 1; >=0 ; i--) {
 
        // initializing a hash array
        int count[10] = { 0 };
 
        int x = i; // creating a copy of i
 
        // initializing variables to compare lengths of digits
        int count1 = 0, count2 = 0;
 
        // counting frequency of the digits
        while (x) {
            count[x % 10]++;
            x /= 10;
            count1++;
        }
 
        // checking if each digit is present once
        for (int j = 0; j < 10; j++) {
            if (count[j] == 1)
                count2++;
        }        
        if (count1 == count2)
            return i;
    }
}
 
// Driver code
int main()
{
    int n = 8490;
    cout << findNumber(n);
    return 0;
}


Java
// Java program to find a number less than
// n such that all its digits are distinct
 
class GFG{
// Function to find a number less than
// n such that all its digits are distinct
static int findNumber(int n)
{
    // looping through numbers less than n
    for (int i = n - 1;i >=0 ; i--) {
 
        // initializing a hash array
        int[] count=new int[10];
 
        int x = i; // creating a copy of i
 
        // initializing variables to compare lengths of digits
        int count1 = 0, count2 = 0;
 
        // counting frequency of the digits
        while (x>0) {
            count[x % 10]++;
            x /= 10;
            count1++;
        }
 
        // checking if each digit is present once
        for (int j = 0; j < 10; j++) {
            if (count[j] == 1)
                count2++;
        }        
        if (count1 == count2)
            return i;
    }
    return -1;
}
 
// Driver code
public static void main(String[] args)
{
    int n = 8490;
    System.out.println(findNumber(n));
}
}
// This code is contributed by mits


Python3
# python 3 program to find a number less than
# n such that all its digits are distinct
 
# Function to find a number less than
# n such that all its digits are distinct
def findNumber(n):
    # looping through numbers less than n
    i = n-1
    while(i>=0):
        # initializing a hash array
        count = [0 for i in range(10)]
 
        x = i
        # creating a copy of i
 
        # initializing variables to compare lengths of digits
        count1 = 0
        count2 = 0
 
        # counting frequency of the digits
        while (x):
         
            count[x%10] += 1
            x = int(x / 10)
            count1 += 1
         
        # checking if each digit is present once
        for j in range(0,10,1):
            if (count[j] == 1):
                count2 += 1
                 
        if (count1 == count2):
            return i
        i -= 1
     
# Driver code
if __name__ == '__main__':
 
    n = 8490
    print(findNumber(n))
 
# This code is implemented by
# Surendra_Gangwar


C#
// C# program to find a number less than
// n such that all its digits are distinct
using System;
 
class GFG
{
     
// Function to find a number less than
// n such that all its digits are distinct
static int findNumber(int n)
{
    // looping through numbers less than n
    for (int i = n - 1; i >= 0; i--)
    {
 
        // initializing a hash array
        int[] count = new int[10];
 
        int x = i; // creating a copy of i
 
        // initializing variables to compare
        // lengths of digits
        int count1 = 0, count2 = 0;
 
        // counting frequency of the digits
        while (x > 0)
        {
            count[x % 10]++;
            x /= 10;
            count1++;
        }
 
        // checking if each digit is
        // present once
        for (int j = 0; j < 10; j++)
        {
            if (count[j] == 1)
                count2++;
        }    
        if (count1 == count2)
            return i;
    }
    return -1;
}
 
// Driver code
static public void Main ()
{
    int n = 8490;
    Console.WriteLine(findNumber(n));
}
}
 
// This code is contributed by akt_mit


PHP
= 0 ; $i--)
    {
 
        // initializing a hash array
        $count = array_fill(0, 10, 0);
 
        $x = $i; // creating a copy of i
 
        // initializing variables to
        // compare lengths of digits
        $count1 = 0; $count2 = 0;
 
        // counting frequency of the digits
        while ($x)
        {
            $count[$x % 10]++;
            $x = (int)($x / 10);
            $count1++;
        }
 
        // checking if each digit
        // is present once
        for ($j = 0; $j < 10; $j++)
        {
            if ($count[$j] == 1)
                $count2++;
        }    
        if ($count1 == $count2)
            return $i;
    }
}
 
// Driver code
$n = 8490;
echo findNumber($n);
 
// This code is contributed
// by Akanksha Rai
?>


Javascript


输出:
8479