makrushin-evgenii
@makrushin-evgenii
Школьник

Как найти количество чисел от 1 до 10^9, имеющих сумму цифр = x?

Дано единственное число X.
Нужно найти количество чисел от 1 до 10^9, имеющих сумму цифр X.
Например при Х = 1, ответ будет 10.

Не могу найти закономерность. При x = 1 всё ясно - считаем степени десятки и всё, а что делать с другими числами?
  • Вопрос задан
  • 449 просмотров
Пригласить эксперта
Ответы на вопрос 4
@vilgeforce
Раздолбай и программист
Не можете найти закономерность - сделайте перебор.
Ответ написан
Комментировать
Я не думаю, что какая-то закономерность найдется. Просто решите задачу, которая выглядит как-то так: Найти все наборы из N чисел, дающие число X, первое число не нулевое. Решив эту задачу получить ответ для вашей очень легко.
Другой вариант конечно ещё проще, просто пробежать все числа и посчитать сумму чисел.

Плюс первого решения в том, что ограничение 10^9 легко преодолевается и не надо думать о переполнениях и прочем.
Ответ написан
Комментировать
@AVKor
В лоб.

Набросал код на ruby, но уже при миллионе тратится заметное время на счёт. Так что лучше какой-нибудь компилирующий ЯП использовать, быстрее тогда наверно будет.
Ответ написан
Комментировать
@lega
10^9, ... Например при Х = 1, ответ будет 10.

При х=1, результат будет 9, т.к. 9 цифр, если до 10^9) (т.е. не включая)
От сюда - самое большое значение будет 9х9 = 81, с результатом = 1, а 80 даст = 9, 79 -> 45, 78 -> 165 [0..81], остальные значения дадут 0. В итоге получается как бы обратная парабола с вершиной где-то посередине.

Что-бы не перебирать весь миллиард, можно сделать полную рекурсию - что-бы пройтись только по конечным значениям, т.е. например при Х=3, первая цифра сначала берет на себя 1, значит на оставшиеся уходит 2, потом 1-я цифра берет на себя 2, оставшимся уходит 1 и т.д.

Но вообще, если "порисовать на бумажке" то становится очевидно что эту задачу можно решить с использованием статистики: при увеличении Х - уменьшается "простор" для размещения, но увеличивается кол-во элементов для размещения, причем результаты младших Х можно использовать в старших.
Ответ написан
Ваш ответ на вопрос

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

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