Related Articles
Next greater Number than N with the same quantity of digits A and B
• Last Updated : 08 Jan, 2019

Given a number and two digits and . 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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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

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

Output:

```4747
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :