📜  下一个大于N的数字,且数字A和B相同

📅  最后修改于: 2021-04-22 08:05:55             🧑  作者: Mango

给定一个数字N和两位数AB 。我们的任务是找到不少于N的最小数字,该数字包含相等的数字AB。

注意:N <= 10 7

例子:

以下是解决此问题的分步算法:

  1. 如果“ N”的长度为奇数,则所得数字的长度为“ N + 1”,因为“ a”和“ b”必须相等。
  2. 如果“ N”的长度是偶数,则结果数的长度将为“ N”或“ N + 2”。
  3. 我们将通过将A和B都一一附加地递归生成数字,并在下一个递归调用中取两者中的最小值。
  4. 最后返回大于或等于“ N”的最小数字。

下面是上述想法的实现:

C++
// C++ program to find next greater Number
// than N with the same quantity of
// digits A and B
  
#include 
using namespace std;
  
// Recursive function to find the required number
long findNumUtil(long res, int a, int aCount, int b, int bCount, int n)
{
    if (res > 1e11)
        return 1e11;
  
    // If the resulting number is >= n and
    // count of a = count of b, return the number
    if (aCount == bCount && res >= n)
        return res;
  
    // select minimum of two and call the function again
    return min(findNumUtil(res * 10 + a, a, aCount + 1, b, bCount, n),
               findNumUtil(res * 10 + b, a, aCount, b, bCount + 1, n));
}
  
// Function to find the number next greater Number
// than N with the same quantity of
// digits A and B
int findNum(int n, int a, int b)
{
    int result = 0;
    int aCount = 0;
    int bCount = 0;
  
    return findNumUtil(result, a, aCount, b, bCount, n);
}
  
// Driver code
int main()
{
    int N = 4500;
    int A = 4;
    int B = 7;
  
    cout << findNum(N, A, B);
  
    return 0;
}


Java
// Java program to find next greater Number
// than N with the same quantity of
// digits A and B
  
public class GFG {
      
    // Recursive function to find the required number
    static long findNumUtil(long res, int a, int aCount, int b, int bCount, int n)
    {
        if (res > 1e11)
            return (long) 1e11;
  
        // If the resulting number is >= n and
        // count of a = count of b, return the number
        if (aCount == bCount && res >= n)
            return res;
  
        // select minimum of two and call the function again
        return Math.min(findNumUtil(res * 10 + a, a, aCount + 1, b, bCount, n),
                   findNumUtil(res * 10 + b, a, aCount, b, bCount + 1, n));
    }
  
    // Function to find the number next greater Number
    // than N with the same quantity of
    // digits A and B
    static int findNum(int n, int a, int b)
    {
        int result = 0;
        int aCount = 0;
        int bCount = 0;
  
        return (int) findNumUtil(result, a, aCount, b, bCount, n);
    }
  
      
    // Driver code
    public static void main(String args[])
    {
           int N = 4500;
            int A = 4;
            int B = 7;
  
            System.out.println(findNum(N, A, B));
  
  
    }
    // This Code is contributed by ANKITRAI1
}


Python3
# Python 3 program to find next greater 
# Number than N with the same quantity of
# digits A and B
  
# Recursive function to find the
# required number
def findNumUtil(res, a, aCount, b, bCount, n):
    if (res > 1e11):
        return 1e11
  
    # If the resulting number is >= n 
    # and count of a = count of b, 
    # return the number
    if (aCount == bCount and res >= n):
        return res
  
    # select minimum of two and call
    # the function again
    return min(findNumUtil(res * 10 + a, 
                           a, aCount + 1, b, bCount, n), 
               findNumUtil(res * 10 + b, a, 
                           aCount, b, bCount + 1, n))
  
  
# Function to find the number next 
# greater Number than N with the 
# same quantity of digits A and B
def findNum(n, a, b):
    result = 0
    aCount = 0
    bCount = 0
  
    return findNumUtil(result, a, aCount,
                               b, bCount, n)
  
# Driver code
if __name__ == '__main__':
    N = 4500
    A = 4
    B = 7
  
    print(findNum(N, A, B))
  
# This code is contributed by
# Sanjit_Prasad


C#
// C# program to find next greater Number
// than N with the same quantity of
// digits A and B
using System;
  
class GFG
{
  
// Recursive function to find the required number
static long findNumUtil(long res, int a, int aCount, 
                        int b, int bCount, int n)
{
    if (res > 1e11)
        return (long) 1e11;
  
    // If the resulting number is >= n and
    // count of a = count of b, return the number
    if (aCount == bCount && res >= n)
        return res;
  
    // select minimum of two and call 
    // the function again
    return Math.Min(findNumUtil(res * 10 + a, a, 
                                aCount + 1, b, bCount, n),
            findNumUtil(res * 10 + b, a, aCount, 
                             b, bCount + 1, n));
}
  
// Function to find the number next 
// greater Number than N with the 
// same quantity of digits A and B
static int findNum(int n, int a, int b)
{
    int result = 0;
    int aCount = 0;
    int bCount = 0;
  
    return (int) findNumUtil(result, a, aCount, 
                                     b, bCount, n);
}
  
// Driver code
public static void Main()
{
    int N = 4500;
    int A = 4;
    int B = 7;
  
    Console.WriteLine(findNum(N, A, B));
}
}
  
// This code is contributed by Shashank


PHP
 100000000000)
        return 10000000000;
  
    // If the resulting number is >= n and
    // count of a = count of b, return the number
    if ($aCount == $bCount && $res >= $n)
        return $res;
  
    // select minimum of two and call the function again
    return min(findNumUtil($res * 10 + $a, $a, $aCount + 1, $b, $bCount, $n),
            findNumUtil($res * 10 + $b, $a, $aCount, $b, $bCount + 1, $n));
}
  
// Function to find the number next greater Number
// than N with the same quantity of
// digits A and B
function findNum($n, $a, $b)
{
    $result = 0;
    $aCount = 0;
    $bCount = 0;
  
    return findNumUtil($result, $a, $aCount, $b, $bCount, $n);
}
  
// Driver code
  
    $N = 4500;
    $A = 4;
    $B = 7;
  
    echo findNum($N, $A, $B);
  
// This Code is contributed by mits
?>


输出:
4747