Анализ числа на наличие одинаковых цифр

Иван Корнев·15.05.2026·4 мин

Чтобы найти повторяющиеся цифры в числе, нужно подсчитать частоту появления каждой цифры (0–9). Самый универсальный способ — преобразовать число в строку или массив цифр и использовать хеш-таблицу (словарь) для накопления счетчиков. Цифры, у которых итоговый счетчик больше 1, считаются повторяющимися.

Выбор метода подсчета зависит от задачи: нужно ли узнать просто факт наличия повторов, количество уникальных повторяющихся цифр или общее число «лишних» вхождений.

Оглавление

Что именно считать повтором

Прежде чем приступать к вычислениям, важно определить метрику. В задачах на логику и программировании встречаются три разные трактовки:

  1. Факт наличия повторов. Ответ: «Да» или «Нет». Например, в числе 1231 ответ «Да», так как единица встречается дважды.
  2. Количество уникальных повторяющихся цифр. Считаем только сами цифры, которые дублируются. В числе 112233 такими цифрами являются 1, 2 и 3. Ответ: 3.
  3. Количество лишних вхождений. Считаем, сколько раз цифра появилась сверх первого раза. В числе 111 первая единица — оригинал, две другие — повторы. Ответ: 2.

Не путайте повторяющиеся цифры с последовательными повторами. В числе 121 цифра 1 повторяется, но не стоит подряд. В числе 112 цифра 1 повторяется и стоит подряд. Алгоритмы для этих задач отличаются.

Ручной расчет: метод частотной таблицы

Для небольших чисел самый надежный способ — визуальный подсчет. Не пытайтесь удержать все в уме, лучше запишите промежуточные результаты.

Алгоритм:

  1. Выпишите все цифры от 0 до 9 в столбик.
  2. Пройдитесь по исходному числу слева направо.
  3. Делайте отметку (галочку или черточку) напротив соответствующей цифры в списке.
  4. Подсчитайте итоги.

Пример: Число 505125

ЦифраОтметкиИтогоПовтор?
0\1
1\1
2\1
30Нет
40Нет
5\\\
6-90Нет

Результат:

  • Уникальная повторяющаяся цифра: 5 (всего 1 вид).
  • Лишние вхождения: 3 - 1 = 2.

Алгоритмы для программистов

Если вы реализуете поиск повторов в коде, избегайте вложенных циклов (сложность $O(N^2)$). Используйте структуры данных с быстрым доступом.

Оптимальный подход: Хеш-таблица (Словарь)

Этот метод работает за линейное время $O(N)$, где N — количество цифр в числе.

Логика:

  1. Создать пустой объект/словарь counts.
  2. Преобразовать число в строку.
  3. Для каждой цифры:
    • Если цифра уже есть в словаре, увеличить значение на 1.
    • Если нет, добавить ключ со значением 1.
  4. Отфильтровать словарь, оставив ключи со значением > 1.

Пример на Python:

def count_repeats(number):
    # Преобразуем в строку для итерации по символам
    str_num = str(number)
    counts = {}
    
    for digit in str_num:
        counts[digit] = counts.get(digit, 0) + 1
        
    # Находим уникальные повторяющиеся цифры
    repeating_digits = {k: v for k, v in counts.items() if v > 1}
    
    return repeating_digits

# Пример использования
num = 112233
repeats = count_repeats(num)
print(f"Повторяющиеся цифры: {repeats}") 
# Вывод: {'1': 2, '2': 2, '3': 2}

Альтернатива: Массив фиксированного размера

Так как цифр всего 10 (0–9), можно использовать массив из 10 элементов. Индекс массива соответствует цифре. Это самый быстрый способ по потреблению памяти и скорости процессора.

  1. Создать массив freq[10], заполненный нулями.
  2. Для каждой цифры d в числе выполнять freq[d]++.
  3. Пройти по массиву freq и вывести индексы, где значение > 1.

Сравнение подходов к подсчету

Выбор формулы зависит от того, какой ответ требуется получить. Рассмотрим число 11122.

ЗадачаЛогика расчетаРезультат для 11122
Есть ли повторы?Существует ли цифра с частотой > 1?Да
Сколько уникальных цифр повторяется?Количество ключей с частотой > 12 (цифры 1 и 2)
Сколько всего лишних вхождений?Сумма (частота - 1) для всех повторов3 (две лишние 1 + одна лишняя 2)
Сколько пар можно составить?Комбинаторика: $C_n^2$ для каждой цифры4 (3 пары из единиц + 1 пара из двоек)

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

Частые ошибки

  1. Игнорирование нуля. Цифра 0 такая же полноправная цифра, как и остальные. В числе 1001 нули повторяются.
  2. Путаница с отрицательными числами. Знак «минус» не является цифрой. Перед анализом число нужно взять по модулю (abs()).
  3. Подсчет соседних вместо всех повторов. Регулярные выражения вида (.)\1+ находят только идущие подряд повторы (например, 11 в 1121). Они пропустят повтор единицы в конце числа 1121. Для полного анализа нужен полный перебор.
  4. Ошибки типов данных. При работе с очень большими числами (более 15–16 знаков) в некоторых языках тип Number (float) может потерять точность. Используйте строки или типы BigInt/Decimal.

FAQ

Как быстро проверить, есть ли в числе повторяющиеся цифры? Самый быстрый способ для человека — отсортировать цифры по возрастанию и посмотреть, есть ли одинаковые рядом. Для компьютера — использовать множество (Set). Если длина множества меньше длины исходного числа, значит, повторы есть.

Считается ли число 11 числом с повторяющимися цифрами? Да. Цифра 1 встречается два раза.

Что делать, если число содержит точку (дробное)? Точка не является цифрой. Обычно анализируют только значащие цифры до и после запятой. Например, в числе 1.1 цифра 1 повторяется.