Количество счастливых чисел

117
16 июня 2019, 01:00

Ну вообще не понимаю как решить данную задачу (наверное она на метод включения-исключения).

Условие очень просто : Найти количество натуральных чисел до 10^N с суммой цифр меньших равных 22 и делящихся на 22. Ну давайте такие числа назовём счастливыми :P

Может есть какая то закономерность? Ну число делится на 22 если последняя цифра {0,2,4,6,8} и сумма цифр на нечетных местах равная сумме на четных.

А да еще числа до 10^18 тобеш N = 18, Час 1 cекунда, может ето что то разрулит :(

Ну и еще примерчик:

N = 2 
Ответ: 4  =>  { 22,44,66,88 }
Answer 1

Нужно идти с другого конца.

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

Приведу пример для чисел до 10000 и одной произвольно выбранной суммы:

Для суммы цифр 3(mod 11), т.е. 3 и 14, возможны 9 вариантов комбинаций первой и третьей цифры (S14: (95 86 77 68 59) S3: (30 21 12 03)) и 4 варианта комбинаций второй и четвёртой цифры (S14: (86 58) S3: (30 12)).

Сумме цифр в пределах 22 удовлетворяют чередующиеся комбинации,выбранные из S3/S3, S3/S14 и S14/S3, но не S14/S14, так что получается 5x2+4x2+4x2= 26 чисел, делящихся на 22, суммы чередующихся цифр которых равны 3 или 14, и сумма цифр не превосходит 22 (пример - 5390=22*245)

Answer 2

Ясно, что число меньше 10^N имеет количество цифр не больше N

Вам не нужно заморачиваться с большими числами. Тем более, что никуда не поместите эти числа, если допустим N>20

Обьявите количество чисел удовлетворяющих задаче unsigned answer = 0; Создайте массив unsigned number[N] = {0}; нулей.

И в цикле, пока не достигнете начала массива прибавляйте последним двум элементам 2, остаток от 10 записываем, а целую часть прибавляем к предыдущему элементу , пока он меньше чем 10(ну как на бумаге суммируете число и 22)

Проверяете, если сумма элементов меньше 22, то ++answer

Когда первый элемент массива перестанет быть однозначным числом, answer будет ваш ответ.

P.S. С таким альгоритмом ваш код будет работать очень быстро даже при трехзначном значении N. А если вам знаком std::valarray, то задача решится проще и быстрее, поскольку он оптимизирован именно для числовых методов

READ ALSO
Скопировать все файлы [закрыт]

Скопировать все файлы [закрыт]

Как можно скопировать все файлы, имена которых начинается с "stat" (есть примерно 500 файлов типа stat1txt stat2

165
SharedPreferences в отдельном классе

SharedPreferences в отдельном классе

Пытаюсь загрузить сохраненную строку в отдельном классе сл способом

144
Как работать с Google Maps в JavaFX?

Как работать с Google Maps в JavaFX?

Нужно разработать JavaFX приложение, в котором будет интеграция с сервисом Google MapЖелательно не просто html страничка, которую можно отобразить...

118