El menor entero mayor que n tal que consta del dígito m exactamente k veces

Dados tres enteros n , m y k , la tarea es encontrar el entero más pequeño > n tal que el dígito m aparezca exactamente k veces en él.
Ejemplos: 
 

Entrada: n = 111, m = 2, k = 2 
Salida: 122
Entrada: n = 111, m = 2, k = 3 
Salida: 222 
 

Enfoque: comience a iterar desde n + 1 y para cada número entero verifique si consta del dígito m exactamente k veces. De esta manera, se puede encontrar el entero más pequeño > n con el dígito m que aparece exactamente k veces.
A continuación se muestra la implementación del enfoque anterior: 
 

C++

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

Java

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

Python3

# 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

C#

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

PHP

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

Javascript

<script>
 
// Javascript implementation of the approach
 
// Function that returns true if n contains
// digit m exactly k times
function digitWell(n, m, k)
{
    var cnt = 0;
    while (n > 0) {
        if (n % 10 == m)
            ++cnt;
        n = Math.floor(n/10);
    }
    if(cnt == k)
      return true;
    else
        return false;
}
 
// Function to return the smallest integer > n
// with digit m occurring exactly k times
function findInt(n, m, k)
{
 
    var i = n + 1;
 
    while (true) {
        if (digitWell(i, m, k))
            return i;
        i++;
    }
}
 
// Driver code
    var n = 111, m = 2, k = 2;
    document.write(findInt(n, m, k));
 
</script>
Producción: 

122

 

Complejidad temporal: O(n * log 10 n)

Espacio Auxiliar: O(1), ya que no se ha ocupado ningún espacio extra.

Publicación traducida automáticamente

Artículo escrito por Shivam.Pradhan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *