Next greater Number than N with the same quantity of digits A and B

Given a number N and two digits A and B. The task is to find the least number not less than N which contains the equal number of digits A and B.

Note: N <= 107

Examples:

Input : N = 4500, A = 4, B = 7
Output : 4747
The number greater than 4500 which has the same quantity of number ‘4’ and number ‘7’ is 4747.

Input : N = 99999999, A = 6, B = 7
Output : 6666677777



Below is the step by step algorithm to solve this problem:

  1. If the length of ‘N’ is odd then the resulting number will be of length ‘N+1’ as both ‘a’ and ‘b’ has to be in equal quantity.
  2. If the length of ‘N’ is even then the resulting number will either be of length ‘N’ or ‘N+2’.
  3. We will generate the number recursively by appending both A and B one by one and take the minimum of the two for the next recursive call.
  4. At last return the smallest number greater than or equal to ‘N’.

Below is the implementation of the above idea:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find next greater Number
// than N with the same quantity of
// digits A and B
  
#include <bits/stdc++.h>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


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#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find next greater Number
// than N with the same quantity of
// digits A and B
  
  
// Recursive function to find the required number
function findNumUtil($res, $a, $aCount, $b, $bCount, $n)
{
    if ($res > 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
?>

chevron_right


Output:

4747


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.