Задать вопрос
madpsychocell
@madpsychocell
программист

Сколько вообще целых и дробных чисел с неповторяющимися цифрами существует?

Я сделал реализацию по подсчёту чисел, начиная с нуля и до 9876543210 для поиска чисел, у которых цифры в числе не повторяются и нашёл то, что уникальных чисел 8877691. Если же вычислить количество ещё и отрицательных целых чисел, - то их будет 8877691 умножить на 2 минус 1 (т.к. дважды ноль не нужен). Но меня интересует вопрос, а сколько и дробных отрицательных и положительных чисел вместе с нулём. цифры которых не могут повторятся. У меня есть возможность использовать перебор, но он займёт месяцы, есть метод перебора и делением на 10, 100, 1000 и т.д. для поиска дробных, но тут надо наверное заносить результаты в динамический список и сравнивать с повторно найденными (я не проверял!). Так сколько же чисел таких?
  • Вопрос задан
  • 895 просмотров
Подписаться 3 Простой 8 комментариев
Пригласить эксперта
Ответы на вопрос 5
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Давайте прикинем.
Для дробных чисел, имеющих хоть один значащий разряд перед запятой и один после мы должны выбрать первую цифру из девяти (ноль исключаем), последнюю из восьми (исключаем уже выбранную и ноль), третью из восьми оставшихся, четвёртую из семи и т.д. Кроме того, точка может стоять в одной из n-1 позиций, где n - количество цифр.
Получаем:
Чисел из 10 цифр: 9 * 8 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 * 9 = 26'127'360
Чисел из 9 цифр: 9 * 8 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 8 = 23'224'320
Чисел из 8 цифр: 9 * 8 * 8 * 7 * 6 * 5 * 4 * 3 * 7 = 10'160'640
...
Чисел из 2 цифр: 9 * 8 * 1 = 72
Просуммировав, получим 63'130'248
Добавим сюда числа вида 0.xxx. Поскольку ноль фиксирован, первую цифру после него мы можем выбрать из девяти, вторую из восьми оставшихся и так далее.
Чисел из 10 цифр: 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 362'880
Чисел из 9 цифр: 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 = 362'880
Чисел из 8 цифр: 9 * 8 * 7 * 6 * 5 * 4 * 3 = 181'440
...
Чисел из 2 цифр: 9
Сумма 986'409
Теперь возьмём целые числа. В первой позиции не может быть нуля, поэтому первую цифру выбираем из девяти. Вторую из девяти оставшихся, третью из восьми и т.д.
Чисел из 10 цифр: 9 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 3'265'920
Чисел из 9 цифр: 9 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 = 3'265'920
Чисел из 8 цифр: 9 * 9 * 8 * 7 * 6 * 5 * 4 * 3 = 1'632'960
...
Чисел из 2 цифр: 9 * 9 = 81
Чисел из 1 цифры: 9
Сумма 8'877'690
Сложим всё, добавив ноль, получим 72'994'348.
Ответ написан
GavriKos
@GavriKos
Ну по идее целые от дробных в данном случае отличаются только наличием запятой, т.к. нет никакого условия насчет повтора/неповтора в дробной части. Поэтому если у вас есть все числа целые, то из каждого легко получить все вариации дробных - количество цифр в числе - 1 (ну еще учесть ноль в начале).

Т.е. я к тому, что КОМБИНАЦИЙ цифр новых у вас не будет. Только старые комбинации +все вариации с запятой. Перебирать дробные числа не надо
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Дробные числа можно рассматривать как те-же самые целые только с множителем 10 в степени -1
и потом -2 и так далее. Результаты - объединить.
Ответ написан
@Zerg89
Ровно столько же сколько и натуральных за вычетом 0 из всей последовательности предиущего расчёта так как 0 уже расположен в начале
Ps писал человек без высшего образования

С коректировкой на перемещение запятой в каждом из оставшихся, тогда для каждого из оставшихся существует n(разрядов числа) вариций
Ответ написан
madpsychocell
@madpsychocell Автор вопроса
программист
36085481 у меня получилось.
программа такая:
Global maxDigits = 10

; Функция для подсчета целых чисел
Procedure CountIntegers()
Define total = 0

For digits = 1 To maxDigits
If digits = 1
; Одноразрядные числа (0-9)
total + 10
Else
; Многоразрядные числа, первая цифра 1-9
Define count = 9
For d = 1 To digits - 1
count * (10 - d) ; Умножаем на доступные цифры
Next d
total + count
EndIf
Next digits

ProcedureReturn total
EndProcedure

; Функция для подсчета дробных чисел
Procedure CountDecimals()
Define total = 0

; Смотрим на целую часть (1-9 цифр)
For intDigits = 1 To 9
Define wholeCount = 9

For d = 1 To intDigits - 1
wholeCount * (10 - d)
Next d

; Доля после запятой (от 1 до 10 цифр)
For decDigits = 1 To 10 - intDigits
Define decimalCount = 1

For d = 1 To decDigits - 1
decimalCount * (10 - d - intDigits) ; Учитываем уже использованные цифры
Next d

total + wholeCount * decimalCount
Next decDigits
Next intDigits

ProcedureReturn total
EndProcedure

; Основная часть программы
Define totalIntegers = CountIntegers()
Define totalDecimals = CountDecimals()

; Вывод результатов
MessageRequester("Результаты", "Количество целых чисел: " + Str(totalIntegers) + Chr(10) +
"Количество дробных чисел: " + Str(totalDecimals), #PB_MessageRequester_Ok)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы