Анализ числа на наличие одинаковых цифр
Чтобы найти повторяющиеся цифры в числе, нужно подсчитать частоту появления каждой цифры (0–9). Самый универсальный способ — преобразовать число в строку или массив цифр и использовать хеш-таблицу (словарь) для накопления счетчиков. Цифры, у которых итоговый счетчик больше 1, считаются повторяющимися.
Выбор метода подсчета зависит от задачи: нужно ли узнать просто факт наличия повторов, количество уникальных повторяющихся цифр или общее число «лишних» вхождений.
Оглавление
Что именно считать повтором
Прежде чем приступать к вычислениям, важно определить метрику. В задачах на логику и программировании встречаются три разные трактовки:
- Факт наличия повторов. Ответ: «Да» или «Нет». Например, в числе
1231ответ «Да», так как единица встречается дважды. - Количество уникальных повторяющихся цифр. Считаем только сами цифры, которые дублируются. В числе
112233такими цифрами являются1,2и3. Ответ: 3. - Количество лишних вхождений. Считаем, сколько раз цифра появилась сверх первого раза. В числе
111первая единица — оригинал, две другие — повторы. Ответ: 2.
Не путайте повторяющиеся цифры с последовательными повторами. В числе 121 цифра 1 повторяется, но не стоит подряд. В числе 112 цифра 1 повторяется и стоит подряд. Алгоритмы для этих задач отличаются.
Ручной расчет: метод частотной таблицы
Для небольших чисел самый надежный способ — визуальный подсчет. Не пытайтесь удержать все в уме, лучше запишите промежуточные результаты.
Алгоритм:
- Выпишите все цифры от 0 до 9 в столбик.
- Пройдитесь по исходному числу слева направо.
- Делайте отметку (галочку или черточку) напротив соответствующей цифры в списке.
- Подсчитайте итоги.
Пример: Число 505125
| Цифра | Отметки | Итого | Повтор? |
|---|---|---|---|
| 0 | \ | 1 | |
| 1 | \ | 1 | |
| 2 | \ | 1 | |
| 3 | 0 | Нет | |
| 4 | 0 | Нет | |
| 5 | \ | \ | \ |
| 6-9 | 0 | Нет |
Результат:
- Уникальная повторяющаяся цифра:
5(всего 1 вид). - Лишние вхождения:
3 - 1 = 2.
Алгоритмы для программистов
Если вы реализуете поиск повторов в коде, избегайте вложенных циклов (сложность $O(N^2)$). Используйте структуры данных с быстрым доступом.
Оптимальный подход: Хеш-таблица (Словарь)
Этот метод работает за линейное время $O(N)$, где N — количество цифр в числе.
Логика:
- Создать пустой объект/словарь
counts. - Преобразовать число в строку.
- Для каждой цифры:
- Если цифра уже есть в словаре, увеличить значение на 1.
- Если нет, добавить ключ со значением 1.
- Отфильтровать словарь, оставив ключи со значением > 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 элементов. Индекс массива соответствует цифре. Это самый быстрый способ по потреблению памяти и скорости процессора.
- Создать массив
freq[10], заполненный нулями. - Для каждой цифры
dв числе выполнятьfreq[d]++. - Пройти по массиву
freqи вывести индексы, где значение > 1.
Сравнение подходов к подсчету
Выбор формулы зависит от того, какой ответ требуется получить. Рассмотрим число 11122.
| Задача | Логика расчета | Результат для 11122 |
|---|---|---|
| Есть ли повторы? | Существует ли цифра с частотой > 1? | Да |
| Сколько уникальных цифр повторяется? | Количество ключей с частотой > 1 | 2 (цифры 1 и 2) |
| Сколько всего лишних вхождений? | Сумма (частота - 1) для всех повторов | 3 (две лишние 1 + одна лишняя 2) |
| Сколько пар можно составить? | Комбинаторика: $C_n^2$ для каждой цифры | 4 (3 пары из единиц + 1 пара из двоек) |
Для большинства бытовых задач и простых проверок достаточно знать количество уникальных повторяющихся цифр. Если же вы решаете олимпиадную задачу по комбинаторике, внимательно читайте условие: часто требуют посчитать именно пары или перестановки.
Частые ошибки
- Игнорирование нуля. Цифра
0такая же полноправная цифра, как и остальные. В числе1001нули повторяются. - Путаница с отрицательными числами. Знак «минус» не является цифрой. Перед анализом число нужно взять по модулю (
abs()). - Подсчет соседних вместо всех повторов. Регулярные выражения вида
(.)\1+находят только идущие подряд повторы (например,11в1121). Они пропустят повтор единицы в конце числа1121. Для полного анализа нужен полный перебор. - Ошибки типов данных. При работе с очень большими числами (более 15–16 знаков) в некоторых языках тип
Number(float) может потерять точность. Используйте строки или типыBigInt/Decimal.
FAQ
Как быстро проверить, есть ли в числе повторяющиеся цифры? Самый быстрый способ для человека — отсортировать цифры по возрастанию и посмотреть, есть ли одинаковые рядом. Для компьютера — использовать множество (Set). Если длина множества меньше длины исходного числа, значит, повторы есть.
Считается ли число 11 числом с повторяющимися цифрами?
Да. Цифра 1 встречается два раза.
Что делать, если число содержит точку (дробное)?
Точка не является цифрой. Обычно анализируют только значащие цифры до и после запятой. Например, в числе 1.1 цифра 1 повторяется.