Как найти количество повторяющихся цифр в числе

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Given a number N, the task is to count the total number of repeating digits in the given number.

    Examples:

    Input: N = 99677  
    Output: 2
    Explanation:
    In the given number only 9 and 7 are repeating, hence the answer is 2.

    Input: N = 12
    Output: 0
    Explanation:
    In the given number no digits are repeating, hence the answer is 0.

    Naive Approach: The idea is to use two nested loops. In the first loop, traverse from the first digit of the number to the last, one by one. Then for each digit in the first loop, run a second loop and search if this digit is present anywhere else as well in the number. If yes, then increase the required count by 1. In the end, print the calculated count.

    Algorithm

    Define a function called count_repeating_digits(num)  
    Convert the input number to a string using the to_string() function 
    Store it in a variable called str_num
    Initialize a variable called count to 0
     
    Use a nested loop to compare each digit in the string with every other digit
       a. For each digit i in str_num, start another loop to compare it with all the digits j following it
       b. If a repeating digit is found, increment the count by 1 and exit the inner loop
       c. Continue comparing the rest of the digits
     Return the count of repeating digits
     Call the count_repeating_digits(num) function and store the result in a variable called repeating_digits
     Display the number of repeating digits on the console
     

    C++

    #include <iostream>

    #include <string>

    using namespace std;

    int count_repeating_digits(int num) {

        int count = 0;

        string str_num = to_string(num); 

        for (int i = 0; i < str_num.length(); i++) {

            for (int j = i+1; j < str_num.length(); j++) {

                if (str_num[i] == str_num[j]) {

                    count++;

                    break

                }

            }

        }

        return count;

    }

    int main() {

        int num=99677;

        int repeating_digits = count_repeating_digits(num);

        cout << "Number of repeating digits: " << repeating_digits << endl;

        return 0;

    }

    Python3

    def count_repeating_digits(num):

        count = 0

        str_num = str(num) 

        for i in range(len(str_num)):

            for j in range(i+1, len(str_num)):

                if str_num[i] == str_num[j]:

                    count += 1

                    break 

        return count

    num = 99677

    repeating_digits = count_repeating_digits(num)

    print("Number of repeating digits:", repeating_digits)

    Output

    Number of repeating digits: 2

    Time Complexity: O(N2)
    Auxiliary Space: O(1)

    Efficient Approach: The idea is to use Hashing to store the frequency of the digits and then count the digits with a frequency equal to more than 1. Follow the steps below to solve the problem:

    • Create an array of size 10 to store the count of digits 0 – 9. Initially store each index as 0.
    • Now for each digit of number N, increment the count of that index in the array.
    • Traverse the array and count the indices that have value more than 1.
    • In the end, print this count.

    Below is the implementation of the above approach:

    C++

    #include <bits/stdc++.h>

    using namespace std;

    int countRepeatingDigits(int N)

    {

        int res = 0;

        int cnt[10] = { 0 };

        while (N > 0) {

            int rem = N % 10;

            cnt[rem]++;

            N = N / 10;

        }

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

            if (cnt[i] > 1) {

                res++;

            }

        }

        return res;

    }

    int main()

    {

        int N = 12;

        cout << countRepeatingDigits(N);

        return 0;

    }

    Java

    class GFG{

    static int countRepeatingDigits(int N)

    {

        int res = 0;

        int cnt[] = new int[10];

        while (N > 0)

        {

            int rem = N % 10;

            cnt[rem]++;

            N = N / 10;

        }

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

        {

            if (cnt[i] > 1)

            {

                res++;

            }

        }

        return res;

    }

    public static void main(String[] args)

    {

        int N = 12;

        System.out.println(countRepeatingDigits(N));

    }

    }

    Python3

    def countRepeatingDigits(N):

        res = 0

        cnt = [0] * 10

        while (N > 0):

            rem = N % 10

            cnt[rem] += 1

            N = N // 10

        for i in range(10):

            if (cnt[i] > 1):

                res += 1

        return res

    N = 12

    print(countRepeatingDigits(N))

    C#

    using System;

    class GFG{

    static int countRepeatingDigits(int N)

    {

        int res = 0;

        int []cnt = new int[10];

        while (N > 0)

        {

            int rem = N % 10;

            cnt[rem]++;

            N = N / 10;

        }

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

        {

            if (cnt[i] > 1)

            {

                res++;

            }

        }

        return res;

    }

    public static void Main(String[] args)

    {

        int N = 12;

        Console.WriteLine(countRepeatingDigits(N));

    }

    }

    Javascript

    <script>

    function countRepeatingDigits(N)

    {

        var res = 0;

        var cnt = Array(10).fill(0);

        while (N > 0) {

            var rem = N % 10;

            cnt[rem]++;

            N = N / 10;

        }

        for (var i = 0; i < 10; i++) {

            if (cnt[i] > 1) {

                res++;

            }

        }

        return res;

    }

    var N = 12;

    document.write( countRepeatingDigits(N));

    </script>

    Time Complexity: O(N)
    Auxiliary Space: O(1)

    Method #2:Using built in python functions:

    • Convert integer to string.
    • Use the Counter function to count the frequency of characters.
    • If the frequency is greater than 1 increment the count

    Below is the implementation:

    C++

    #include <iostream>

    #include <unordered_map>

    #include <string>

    using namespace std;

    int countRepeatingDigits(int N)

    {

      string number = to_string(N);

      int count = 0;

      unordered_map<char, int> frequency;

      for (char c : number) {

        frequency++;

      }

      for (auto& it : frequency) {

        if (it.second > 1) {

          count++;

        }

      }

      return count;

    }

    int main()

    {

      int N = 1232145;

      cout << countRepeatingDigits(N) << endl;

      return 0;

    }

    Java

    import java.util.HashMap;

    public class Main {

        static int countRepeatingDigits(int N)

        {

            String number = Integer.toString(N);

            int count = 0;

            HashMap<Character, Integer> frequency

                = new HashMap<>();

            for (char c : number.toCharArray()) {

                frequency.put(c,

                              frequency.getOrDefault(c, 0) + 1);

            }

            for (char key : frequency.keySet()) {

                if (frequency.get(key) > 1) {

                    count++;

                }

            }

            return count;

        }

        public static void main(String[] args)

        {

            int N = 1232145;

            System.out.println(countRepeatingDigits(N));

        }

    }

    Python3

    from collections import Counter

    def countRepeatingDigits(N):

        number = str(N)

        count = 0

        frequency = Counter(number)

        for i in frequency:

            if(frequency[i] > 1):

                count = count+1

        return count

    N = 1232145

    print(countRepeatingDigits(N))

    Javascript

    function countRepeatingDigits(N)

    {

        let number = N.toString();

        let count = 0;

        let frequency = {};

        for (let c of number) {

            frequency = (frequency || 0) + 1;

        }

        for (let key in frequency) {

            if (frequency[key] > 1) {

                count++;

            }

        }

        return count;

    }

    let N = 1232145;

    console.log(countRepeatingDigits(N));

    C#

    using System;

    using System.Collections.Generic;

    public class Program

    {

        public static int countRepeatingDigits(int N)

        {

            string number = N.ToString();

            int count = 0;

            Dictionary<char, int> frequency = new Dictionary<char, int>();

            foreach (char c in number)

            {

                if (!frequency.ContainsKey(c))

                {

                    frequency = 0;

                }

                frequency++;

            }

            foreach (KeyValuePair<char, int> item in frequency)

            {

                if (item.Value > 1)

                {

                    count++;

                }

            }

            return count;

        }

        public static void Main()

        {

            int N = 1232145;

            Console.WriteLine(countRepeatingDigits(N));

        }

    }

    Time Complexity: O(N)
    Auxiliary Space: O(N)

    Last Updated :
    24 Apr, 2023

    Like Article

    Save Article

    На вход получаем два числа, 1000 и 2600. Необходимо вывести все числа с тремя одинаковыми числами (не используя списки). Начал как — то так, но закончить не могу…. Как посчитать одинаковые цифры и вывести числа?

    num_1 = int(input(‘Введите первое число: ‘))
    num_2 = int(input(‘Введите второе число: ‘))
    count = 0

    for i in range(number1, number2 + 1, 1):
    i = str(i)
    for num in ……..:
    if num == …………:
    ……………………..


    • Вопрос задан

      10 мар.

    • 440 просмотров

    (Ответ сгенерирован искусственным интеллектом!)
    Вы можете решить эту задачу, преобразовав каждое число в строку, а затем использовать метод count() для подсчета количества вхождений каждой цифры. Затем можно проверить, есть ли у числа три одинаковых цифры, используя условие if. Например:

    num_1 = 1000
    num_2 = 2600
    
    for i in range(num_1, num_2 + 1):
        s = str(i)
        for c in s:
            if s.count(c) == 3:
                print(i)
                break

    Здесь мы проходимся по каждому числу i в диапазоне от num_1 до num_2, преобразуя его в строку s. Затем мы проходимся по каждой цифре c в строке s, и если c встречается в строке s три раза, мы выводим число i и переходим к следующему числу. Обратите внимание, что мы используем оператор break, чтобы выйти из цикла, когда мы находим число с тремя одинаковыми цифрами, потому что дальнейший поиск в этом числе бессмысленен.

    Пригласить эксперта

    Составь коллекцию, в которой будет храниться набор пар: цифра и сколько раз она встретилась. Лучше всего подойдёт словарь.
    Дальше просто перебери элементы словаря, если есть элемент, у которого значение равно 3, значит, число подходит.

    Совет: посмотри в сторону collections.Counter.

    Можно попробовать решить обратную зачачу. Генерировать все с 3 одинаковыми.

    Например.

    111x = генератор для последовательности 1111,1112,1113....1119
    11x1 = для 1111, 1121,1131....

    А потом — отфильтровать те которые не заходят в заявленный диапазон.


    • Показать ещё
      Загружается…

    25 мая 2023, в 05:30

    1000 руб./за проект

    25 мая 2023, в 05:14

    5000 руб./за проект

    25 мая 2023, в 02:38

    1000 руб./за проект

    Минуточку внимания

    7 / 7 / 0

    Регистрация: 27.09.2011

    Сообщений: 144

    1

    Найти количество повторяющихся цифр в числе

    13.05.2012, 17:46. Показов 7232. Ответов 10


    Студворк — интернет-сервис помощи студентам

    Вводится натуральное число. Нужно вывести кол-во повторяющихся чисел в нем.
    Решить нужно 2-мя способами. С циклом постусловия, и послеусловия



    0



    Эксперт С++

    3646 / 1378 / 243

    Регистрация: 16.04.2009

    Сообщений: 4,526

    13.05.2012, 19:05

    2

    Цитата
    Сообщение от Walter Bishop
    Посмотреть сообщение

    Вводится натуральное число. Нужно вывести кол-во повторяющихся чисел в нем.

    Как это понять?



    0



    7 / 7 / 0

    Регистрация: 27.09.2011

    Сообщений: 144

    13.05.2012, 22:07

     [ТС]

    3

    Цитата
    Сообщение от Walter Bishop
    Посмотреть сообщение

    Нужно вывести кол-во повторяющихся цифр в нем.

    ЦИФР имелось в виду. Прошу прощения.



    0



    Toshkarik

    1180 / 893 / 94

    Регистрация: 03.08.2011

    Сообщений: 2,461

    13.05.2012, 22:28

    4

    C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    #include <stdio.h>
     
     
    int main() {
       unsigned int digits[ 10 ] = { 0 },
                    i = 0;
       long long int num = 0;
       
       
       printf( "Enter the number: " );
       scanf( "%lld", &num );
     
       if ( !num )
          digits[ 0 ]++;
     
       while ( num ) {
          digits[ num % 10 ]++;
          num /= 10;
       }
       
       for ( i = 0; i < 10; i++ )
          printf( "Number contain %d: %dn", i, digits[ i ]);
       
       return 0;
    }
    C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    #include <stdio.h>
     
     
    int main() {
       unsigned int digits[ 10 ] = { 0 },
                    i = 0;
       long long int num = 0;
       
       
       printf( "Enter the number: " );
       scanf( "%lld", &num );
       
        do {
          digits[ num % 10 ]++;
          num /= 10;
       } while ( num );
       
       for ( i = 0; i < 10; i++ )
          printf( "Number contain %d: %dn", i, digits[ i ]);
       
       return 0;
    }



    1



    Эксперт С++

    4982 / 3089 / 456

    Регистрация: 10.11.2010

    Сообщений: 11,165

    Записей в блоге: 10

    13.05.2012, 23:34

    5

    Нее… как понять это:

    Цитата
    Сообщение от Walter Bishop
    Посмотреть сообщение

    С циклом

    постусловия

    , и

    послеусловия

    !???



    0



    Эксперт С++

    3646 / 1378 / 243

    Регистрация: 16.04.2009

    Сообщений: 4,526

    13.05.2012, 23:40

    6

    lazybiz, предполагаю автор имел ввиду do while и while.



    0



    Эксперт С++

    4982 / 3089 / 456

    Регистрация: 10.11.2010

    Сообщений: 11,165

    Записей в блоге: 10

    13.05.2012, 23:49

    7

    go, полагаю я с тобой согласен.



    0



    7 / 7 / 0

    Регистрация: 27.09.2011

    Сообщений: 144

    14.05.2012, 07:43

     [ТС]

    8

    Абсолютно верно.

    Добавлено через 10 минут
    А можно без всяких digits. Просто мы этого не проходили.



    0



    1180 / 893 / 94

    Регистрация: 03.08.2011

    Сообщений: 2,461

    14.05.2012, 07:44

    9

    digits[] это массив, вы не проходили массивы?



    0



    7 / 7 / 0

    Регистрация: 27.09.2011

    Сообщений: 144

    14.05.2012, 07:53

     [ТС]

    10

    нет, к сожалению.

    Добавлено через 14 секунд
    Вы сможете переделать ?



    0



    Toshkarik

    1180 / 893 / 94

    Регистрация: 03.08.2011

    Сообщений: 2,461

    14.05.2012, 18:11

    11

    C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    #include <stdio.h>
     
     
    int main() {
       unsigned int i = 0,
                    cnt = 0;
       long long int num = 0,
                     temp = 0;
       
       
       printf( "Enter the number: " );
       scanf( "%lld", &num );
       
        do {
           temp = num;
           cnt = 0;
           
           do {
              if ( temp % 10 == i )
                 cnt++;
              
              temp /= 10;
           } while ( temp );
           
           printf( "Number contain %d: %dn", i, cnt );
           
           i++;
       } while ( i < 10 );
       
       return 0;
    }
    C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    #include <stdio.h>
     
     
    int main() {
       unsigned int i = 0,
                    cnt = 0;
       long long int num = 0,
                     temp = 0;
       
       
       printf( "Enter the number: " );
       scanf( "%lld", &num );
       
       if ( num == 0 ) {
          printf( "Number contain %d: %dn", 0, 1 );
          i = 1;
       }
       
       while ( i < 10 ) {
          temp = num;
          cnt = 0;
          
          while ( temp ) {
             if ( temp % 10 == i )
                cnt++;
             
             temp /= 10;
          } 
          
          printf( "Number contain %d: %dn", i, cnt );
           
          i++;
       }
       
       return 0;
    }



    0



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

    x = int(input('Введите число:'))
    
    def array(x):
        global a
        a = []
        while x > 0:
            b = x % 10
            a.append(b)
            x //= 10
            return list(reversed(a))
    
    
    print(array(x))
    for i in range(len(a)):
        if a[i] == a[i+1]:
            print('да')
            break
        else:
            print("нет")
    

    задан 18 мар 2021 в 6:48

    Xlemon5's user avatar

    1

    У вас цикл while завершается на первой итерации. Уберите отступ перед return.

    Вторая ошибка заключается в том, что у вас цикл for выполняется len(a) раз. Поэтому на последней итерации a[i+1] приведет к исключению IndexError. Используйте цикл до len(a) - 1.

    Ну и сам алгоритм сравнения чисел неверный. Для числа 121 вы не найдете совпадений, т.к. 1 != 2 и 2 != 1. Можно сравнить длину множества от a с длиной a. Множество содержит только уникальные элементы последовательности, поэтому, если длины разные, то можно сделать вывод, что какое-то число повторяется.

    Избавьтесь от глобальных переменных.

    def array(x):
        nums = []
        while x > 0:
            b = x % 10
            nums.append(b)
            x //= 10
        return list(reversed(nums))
    
    
    x = int(input('Введите число: '))
    a = array(x)
    print('Да' if len(set(a)) != len(a) else 'Нет')
    

    ответ дан 18 мар 2021 в 6:59

    ioprst's user avatar

    ioprstioprst

    1,2187 серебряных знаков17 бронзовых знаков

    Можно решить вопрос просто стандартными структурами. Построить список со всеми символами числа, потом множество этих символов (удалит дубли), если длина этих двух переменных не равна то, очевидно, есть дубли. Предварительно можно проверить, что если кол-во символов в списке больше 10 (столько всего есть цифр) то, очевдно, цифры повторяются.

    def double_exist(number: int) -> bool:
        list_number = [s for s in str(number)]
        if len(list_number) > 10:
            return True
    
        set_number = set(list_number)
        if len(list_number) != len(set_number):
            return True
        return False
    
    
    number = int(input('Введите число: '))
    
    if double_exist(number):
        print('Да')
    else:
        print('Нет')
    
    

    ответ дан 18 мар 2021 в 11:00

    asanisimov's user avatar

    asanisimovasanisimov

    1,4564 серебряных знака12 бронзовых знаков

    3

    Посчитать общее количество определенных цифр в числах

    Просмотров 13.7к. Обновлено 15 октября 2021

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

    1. Запросить у пользователя количество вводимых чисел (n) и цифру для подсчета (d).
    2. Присвоить счетчику цифр значение 0.
    3. Выполнить n раз цикл, в теле которого
      1. запрашивать очередное число,
      2. пока это число не сократиться до нуля
        1. извлекать последнюю его цифру и сравнивать с цифрой, которую надо посчитать,
        2. увеличивать значение счетчика цифр на 1, если сравниваемые цифры совпадают,
        3. избавляться от последней цифры числа.
    4. В конце программы вывести количество посчитанных цифр на экран.

    Pascal

    количество цифр в числе паскаль


    var
    m: word;
    n,d,i, count: byte;
    begin
    write('Количество чисел: ');
    readln(n);
    write('Цифра: ');
    readln(d);
    count := 0;
    for i:=1 to n do begin
    readln(m);
    while m > 0 do begin
    if m mod 10 = d then
    count := count + 1;
    m := m div 10;
    end;
    end;
    writeln('Количество цифр: ', count);
    end.



    Количество чисел: 6
    Цифра: 5
    301
    8952
    155
    306
    200
    541
    Количество цифр: 4

    Язык Си


    #include

    main () {
    int n,d,m,count,i;
    printf("Количество чисел: ");
    scanf("%d", &n);
    printf("Цифра: ");
    scanf("%d", &d);
    count = 0;
    for(i=0;i< n;i++) {
    scanf("%d", &m);
    while (m>0) {
    if (m%10 == d) count += 1;
    m = m / 10;
    }
    }
    printf("Количество цифр: %dn", count);
    }



    Количество чисел: 4
    Цифра: 1
    10500
    1400
    500
    201
    Количество цифр: 3

    Python

    количество цифр в числе python (питон)


    n = int(input("Сколько будет чисел? "))
    d = int(input("Какую цифру считать? "))
    count = 0
    for i in range(1,n+1):
    m = int(input("Число " + str(i) + ": "))
    while m > 0:
    if m%10 == d:
    count += 1
    m = m // 10

    print("Было введено %d цифр %d" % (count, d))



    Сколько будет чисел? 5
    Какую цифру считать? 0
    Число 1: 508
    Число 2: 1024
    Число 3: 300
    Число 4: 10101
    Число 5: 15
    Было введено 6 цифр 0

    КуМир


    алг количество цифры
    нач
    цел m,n,d,i,count;
    вывод "Количество чисел: "
    ввод n
    вывод "Цифра: "
    ввод d
    count := 0
    нц для i от 1 до n
    ввод m
    нц пока m > 0
    если mod(m,10) = d то
    count := count + 1
    все
    m := div(m,10)
    кц
    кц
    вывод "Количество цифр: ", count
    кон



    Количество чисел: 5
    Цифра: 0
    1099
    8586
    2300
    15
    10
    Количество цифр: 4

    Basic-256


    input "Количество чисел: ", n
    input "Цифра: ", d
    c = 0
    for i=1 to n
    input m
    while m > 0
    if m%10 = d then c = c+1
    m = m 10
    endwhile
    next i
    print "Количество цифр: " + c



    Количество чисел: 10
    Цифра: 4
    1234
    11
    1287
    8945
    200783
    12
    84
    9600
    544
    244
    Количество цифр: 7

    Понравилась статья? Поделить с друзьями:
  • Как найти свою маршрут квитанцию
  • Как найти корзину ubuntu
  • Как составить доп соглашение если нет трудового договора
  • Как составить письмо в жилинспекцию
  • Как составить литобзор