Smallest integer greater than n such that it consists of digit m exactly k times

Given three integer n, m and k, the task is to find the smallest integer > n such that digit m appears exactly k times in it.

Examples:

Input: n = 111, m = 2, k = 2
Output: 122



Input: n = 111, m = 2, k = 3
Output: 222

Approach: Start iterating from n + 1 and for each integer i check whether it consists of digit m exactly k times. This way smallest integer > n with digit m occurring exactly k times can be found.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
  
// Function that returns true if n contains 
// digit m exactly k times
bool digitWell(int n, int m, int k)
{
    int cnt = 0;
    while (n > 0) {
        if (n % 10 == m)
            ++cnt;
        n /= 10;
    }
    return cnt == k;
}
  
// Function to return the smallest integer > n 
// with digit m occurring exactly k times
int findInt(int n, int m, int k)
{
  
    int i = n + 1;
  
    while (true) {
        if (digitWell(i, m, k))
            return i;
        i++;
    }
}
  
// Driver code
int main()
{
    int n = 111, m = 2, k = 2;
    cout << findInt(n, m, k);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach 
class GFG
{
      
// Function that returns true if n contains 
// digit m exactly k times
static boolean digitWell(int n, int m, int k)
{
    int cnt = 0;
    while (n > 0
    {
        if (n % 10 == m)
            ++cnt;
        n /= 10;
    }
    return cnt == k;
}
  
// Function to return the smallest integer > n 
// with digit m occurring exactly k times
static int findInt(int n, int m, int k)
{
  
    int i = n + 1;
  
    while (true
    {
        if (digitWell(i, m, k))
            return i;
        i++;
    }
}
  
// Driver code
public static void main(String[] args)
{
    int n = 111, m = 2, k = 2;
    System.out.println(findInt(n, m, k));
}
  
// This code is contributed by Code_Mech

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach
  
# Function that returns true if n 
# contains digit m exactly k times
def digitWell(n, m, k):
  
    cnt = 0
    while (n > 0):
  
        if (n % 10 == m):
            cnt = cnt + 1;
        n = (int)(n / 10);
  
    return cnt == k;
  
# Function to return the smallest integer > n 
# with digit m occurring exactly k times
def findInt(n, m, k):
  
    i = n + 1;
  
    while (True): 
        if (digitWell(i, m, k)):
            return i;
        i = i + 1;
  
# Driver code
n = 111; m = 2; k = 2;
print(findInt(n, m, k));
  
# This code is contributed 
# by Akanksha Rai

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of the approach 
using System;
class GFG
{
      
// Function that returns true if n contains 
// digit m exactly k times
static bool digitWell(int n, int m, int k)
{
    int cnt = 0;
    while (n > 0) 
    {
        if (n % 10 == m)
            ++cnt;
        n /= 10;
    }
    return cnt == k;
}
  
// Function to return the smallest integer > n 
// with digit m occurring exactly k times
static int findInt(int n, int m, int k)
{
  
    int i = n + 1;
  
    while (true
    {
        if (digitWell(i, m, k))
            return i;
        i++;
    }
}
  
// Driver code
public static void Main()
{
    int n = 111, m = 2, k = 2;
    Console.WriteLine(findInt(n, m, k));
}
  
// This code is contributed 
// by Akanksha Rai

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP implementation of the approach 
  
// Function that returns true if n 
// contains digit m exactly k times 
function digitWell($n, $m, $k
    $cnt = 0; 
    while ($n > 0) 
    
        if ($n % 10 == $m
            ++$cnt
        $n = floor($n / 10); 
    
    return $cnt == $k
  
// Function to return the smallest integer > n 
// with digit m occurring exactly k times 
function findInt($n, $m, $k
    $i = $n + 1; 
  
    while (true) 
    
        if (digitWell($i, $m, $k)) 
            return $i
        $i++; 
    
  
// Driver code 
$n = 111;
$m = 2;
$k = 2; 
  
echo findInt($n, $m, $k); 
  
// This code is contributed by Ryuga
?>

chevron_right


Output:

122


My Personal Notes arrow_drop_up

Discovering ways to develop a plane for soaring career goals

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.