Рубрики

Следующее большее число, чем N с тем же количеством цифр A и B

Учитывая номер и две цифры и , Задача состоит в том, чтобы найти наименьшее число не менее 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

Ниже приведен пошаговый алгоритм решения этой проблемы:

  1. Если длина 'N' нечетна, то результирующее число будет иметь длину 'N + 1', так как и 'a', и 'b' должны быть в равном количестве.
  2. Если длина 'N' четна, то результирующее число будет иметь длину 'N' или 'N + 2'.
  3. Мы сгенерируем число рекурсивно, добавив A и B один за другим, и возьмем минимум двух для следующего рекурсивного вызова.
  4. Наконец, верните наименьшее число, большее или равное «N».

Ниже приведена реализация вышеуказанной идеи:

C ++

// C ++ программа для поиска следующего большего числа
// чем N с тем же количеством
// цифры А и В

  
#include <bits/stdc++.h>

using namespace std;

  
// Рекурсивная функция для поиска нужного номера

long findNumUtil(long res, int a, int aCount, int b, int bCount, int n)

{

    if (res > 1e11)

        return 1e11;

  

    // Если полученное число> = n и

    // количество a = количество b, возвращаем число

    if (aCount == bCount && res >= n)

        return res;

  

    // выбираем минимум два и снова вызываем функцию

    return min(findNumUtil(res * 10 + a, a, aCount + 1, b, bCount, n),

               findNumUtil(res * 10 + b, a, aCount, b, bCount + 1, n));

}

  
// Функция для поиска номера следующего большего числа
// чем N с тем же количеством
// цифры А и В

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);

}

  
// Код драйвера

int main()

{

    int N = 4500;

    int A = 4;

    int B = 7;

  

    cout << findNum(N, A, B);

  

    return 0;

}

Джава

// Java программа для поиска следующего большего числа
// чем N с тем же количеством
// цифры А и В

  

public class GFG {

      

    // Рекурсивная функция для поиска нужного номера

    static long findNumUtil(long res, int a, int aCount, int b, int bCount, int n)

    {

        if (res > 1e11)

            return (long) 1e11;

  

        // Если полученное число> = n и

        // количество a = количество b, возвращаем число

        if (aCount == bCount && res >= n)

            return res;

  

        // выбираем минимум два и снова вызываем функцию

        return Math.min(findNumUtil(res * 10 + a, a, aCount + 1, b, bCount, n),

                   findNumUtil(res * 10 + b, a, aCount, b, bCount + 1, n));

    }

  

    // Функция для поиска номера следующего большего числа

    // чем N с тем же количеством

    // цифры А и В

    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);

    }

  

      

    // Код драйвера

    public static void main(String args[])

    {

           int N = 4500;

            int A = 4;

            int B = 7;

  

            System.out.println(findNum(N, A, B));

  

  

    }

    // Этот код предоставлен ANKITRAI1

}

python3

# Python 3 программа для поиска следующего большего
# Число, чем N с тем же количеством
# цифры А и В

  
# Рекурсивная функция для поиска
# необходимое количество

def findNumUtil(res, a, aCount, b, bCount, n):

    if (res > 1e11):

        return 1e11

  

    # Если полученное число> = n

    # и количество a = количество b,

    # вернуть номер

    if (aCount == bCount and res >= n):

        return res

  

    # выберите минимум два и позвоните

    # функция снова

    return min(findNumUtil(res * 10 + a, 

                           a, aCount + 1, b, bCount, n), 

               findNumUtil(res * 10 + b, a, 

                           aCount, b, bCount + 1, n))

  

  
# Функция, чтобы найти следующий номер
# большее число чем N с
# одинаковое количество цифр A и B

def findNum(n, a, b):

    result = 0

    aCount = 0

    bCount = 0

  

    return findNumUtil(result, a, aCount,

                               b, bCount, n)

  
# Код драйвера

if __name__ == '__main__':

    N = 4500

    A = 4

    B = 7

  

    print(findNum(N, A, B))

  
# Этот код предоставлен
# Sanjit_Prasad

C #

// C # программа для поиска следующего большего числа
// чем N с тем же количеством
// цифры А и В

using System;

  

class GFG

{

  
// Рекурсивная функция для поиска нужного номера

static long findNumUtil(long res, int a, int aCount, 

                        int b, int bCount, int n)

{

    if (res > 1e11)

        return (long) 1e11;

  

    // Если полученное число> = n и

    // количество a = количество b, возвращаем число

    if (aCount == bCount && res >= n)

        return res;

  

    // выбираем минимум два и вызываем

    // функция снова

    return Math.Min(findNumUtil(res * 10 + a, a, 

                                aCount + 1, b, bCount, n),

            findNumUtil(res * 10 + b, a, aCount, 

                             b, bCount + 1, n));

}

  
// Функция для поиска номера рядом
// большее число чем N с
// одинаковое количество цифр A и 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);

}

  
// Код драйвера

public static void Main()

{

    int N = 4500;

    int A = 4;

    int B = 7;

  

    Console.WriteLine(findNum(N, A, B));

}
}

  
// Этот код предоставлен Shashank

PHP

<?php
// PHP программа для поиска следующего большего числа
// чем N с тем же количеством
// цифры А и В

  

  
// Рекурсивная функция для поиска нужного номера

function findNumUtil($res, $a, $aCount, $b, $bCount, $n)

{

    if ($res > 100000000000)

        return 10000000000;

  

    // Если полученное число> = n и

    // количество a = количество b, возвращаем число

    if ($aCount == $bCount && $res >= $n)

        return $res;

  

    // выбираем минимум два и снова вызываем функцию

    return min(findNumUtil($res * 10 + $a, $a, $aCount + 1, $b, $bCount, $n),

            findNumUtil($res * 10 + $b, $a, $aCount, $b, $bCount + 1, $n));

}

  
// Функция для поиска номера следующего большего числа
// чем N с тем же количеством
// цифры А и В

function findNum($n, $a, $b)

{

    $result = 0;

    $aCount = 0;

    $bCount = 0;

  

    return findNumUtil($result, $a, $aCount, $b, $bCount, $n);

}

  
// Код драйвера

  

    $N = 4500;

    $A = 4;

    $B = 7;

  

    echo findNum($N, $A, $B);

  
// Этот код предоставлен Mits
?>

Выход:

4747

Рекомендуемые посты:

Следующее большее число, чем N с тем же количеством цифр A и B

0.00 (0%) 0 votes