Рубрики

Подсчитайте способы написания числа с повторяющимися цифрами

Дана строка, содержащая цифры числа. Номер может содержать много одинаковых непрерывных цифр. Задача состоит в том, чтобы посчитать количество способов написания числа.
Например, рассмотрим 8884441100, его можно записать просто как тройка восемь, тройка, четыре, два, два и двойной ноль. Можно также записать как двойной восемь, восемь, четыре, двойной четыре, два, два, двойной ноль.

Примеры :

Input :  num = 100
Output : 2
The number 100 has only 2 possibilities, 
1) one zero zero 
2) one double zero.

Input : num = 11112
Output: 8
1 1 1 1 2, 11 1 1 2, 1 1 11 2, 1 11 1 2
11 11 2, 1 111 2, 111 1 2, 1111 2

Input : num = 8884441100
Output: 64

Input : num = 12345
Output: 1

Input : num = 11111
Output: 16

Это простая проблема перестановки и комбинации. Если мы возьмем пример теста, приведенный в вопросе 11112. Ответ зависит от количества возможных комбинаций 1111. Количество комбинаций «1111» равно 2 ^ 3 = 8. Поскольку наши комбинации будут зависеть от того, выберем ли мы конкретный 1 и для «2» будет только одна возможность 2 ^ 0 = 1, поэтому ответ для «11112» будет 8 * 1 = 8.
Таким образом, подход состоит в том, чтобы считать конкретную непрерывную цифру в строке и умножить 2 ^ (count-1) на предыдущий результат.

C ++

// C ++ программа для подсчета количества способов, которыми мы
// можно записать число
#include<bits/stdc++.h>

using namespace std;

typedef long long int ll;

  
// Функция для расчета всех возможных заклинаний
// число с повторяющимися цифрами
// num -> строка, которая является любимым числом
ll spellsCount(string num)
{

    int n = num.length();

  

    // окончательное количество возможных заклинаний

    ll result = 1;

  

    // перебирать полный номер

    for (int i=0; i<n; i++)

    {

       // считать частоту смежных

       // цифра num [i]

       int count = 1;

       while (i < n-1 && num[i+1] == num[i])

       {

           count++;

           i++;

       }

  

       // Вычисляем 2 ^ (count-1) и умножаем на результат

       result = result * pow(2, count-1);

    }

    return result;

}

  
// Драйвер программы для запуска дела

int main()

{

    string num = "11112";

    cout << spellsCount(num);

    return 0;

}

Джава

// Java-программа для подсчета количества способов, которыми мы
// можно записать число

class GFG {

      

    // Функция для расчета всего возможного

    // заклинания числа с повторяющимися цифрами

    // num -> строка, которая является любимым числом

    static long spellsCount(String num)

    {

          

        int n = num.length();

  

        // окончательное количество возможных заклинаний

        long result = 1;

  

        // перебирать полный номер

        for (int i = 0; i < n; i++) {

              

            // посчитаем непрерывную частоту

            // конкретная цифра num [i]

            int count = 1;

              

            while (i < n - 1 && num.charAt(i + 1

                               == num.charAt(i)) {

                                      

                count++;

                i++;

            }

  

            // Вычисляем 2 ^ (count-1) и умножаем

            // с результатом

            result = result * 

                     (long)Math.pow(2, count - 1);

        }

        return result;

    }

  

    public static void main(String[] args)

    {

  

        String num = "11112";

  

        System.out.print(spellsCount(num));

    }

}

  
// Этот код предоставлен Anant Agarwal.

python3

# Python3 программа для подсчета количества
# способы, которыми мы можем записать число

  
# Функция для расчета всего возможного
# заклинания числа с повторным
# цифры num -> строка, которая
# любимый номер

def spellsCount(num):

  

    n = len(num);

  

    # итоговое количество

    # возможные заклинания

    result = 1;

  

    # итерация завершена

    # число

    i = 0;

    while(i<n):

      

        # считать непрерывную частоту

        # конкретной цифры num [i]

        count = 1;

        while (i < n - 1 and 

               num[i + 1] == num[i]):

      

            count += 1;

            i += 1;

  

        # Вычислить 2 ^ (количество-1) и

        # умножить с результатом

        result = result * int(pow(2, count - 1));

        i += 1;

    return result;

  
Код водителя

num = "11112";

print(spellsCount(num));

  
# Этот код добавлен
# по митсам

C #

// C # программа для подсчета количества способов, которыми мы
// можно записать число

using System;

  

class GFG {

      

    // Функция для расчета всего возможного

    // заклинания числа с повторением

    // цифры num -> строка которая

    // любимый номер

    static long spellsCount(String num)

    {

          

        int n = num.Length;

  

        // окончательный счет возможного количества

        // заклинания

        long result = 1;

  

        // перебирать полный номер

        for (int i = 0; i < n; i++)

        {

              

            // посчитаем непрерывную частоту

            // конкретная цифра num [i]

            int count = 1;

              

            while (i < n - 1 && num[i + 1] 

                                == num[i])

            {

                count++;

                i++;

            }

  

            // Вычисляем 2 ^ (count-1) и умножаем

            // с результатом

            result = result * 

                    (long)Math.Pow(2, count - 1);

        }

          

        return result;

    }

  

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

    public static void Main()

    {

  

        String num = "11112";

  

        Console.Write(spellsCount(num));

    }

}

  
// Этот код предоставлен нитин митталь.

PHP

<?php
// PHP-программа для подсчета
// количество способов мы
// можно записать число

  
// Функция для расчета
// все возможные заклинания
// число с повторением
// цифры num -> строка
// какой номер любимый

function spellsCount($num)

{

    $n = strlen($num);

  

    // итоговый счет

    // возможные заклинания

    $result = 1;

  

    // перебирать

    // полный номер

    for ($i = 0; $i < $n; $i++)

    {

    // считать непрерывную частоту

    // конкретной цифры num [i]

    $count = 1;

    while ($i < $n - 1 && 

           $num[$i + 1] == $num[$i])

    {

        $count++;

        $i++;

    }

  

    // Вычисляем 2 ^ (count-1) и

    // умножаем результат

    $result = $result

              pow(2, $count - 1);

    }

    return $result;

}

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

$num = "11112";

echo spellsCount($num);

  
// Этот код добавлен
// нитин митталь.
?>


Выход :

8

Если у вас есть другой подход к решению этой проблемы, пожалуйста, поделитесь.

Эта статья предоставлена Шашанком Мишрой (Гуллу) . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

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

Подсчитайте способы написания числа с повторяющимися цифрами

0.00 (0%) 0 votes