给定一个数字和两位数和 。我们的任务是找到不少于N的最小数字,该数字包含相等的数字A和B。
注意:N <= 10 7
例子:
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
以下是解决此问题的分步算法:
- 如果“ N”的长度为奇数,则所得数字的长度为“ N + 1”,因为“ a”和“ b”必须相等。
- 如果“ N”的长度是偶数,则结果数的长度将为“ N”或“ N + 2”。
- 我们将通过将A和B都一一附加地递归生成数字,并在下一个递归调用中取两者中的最小值。
- 最后返回大于或等于“ 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