Ну вообще не понимаю как решить данную задачу (наверное она на метод включения-исключения).
Условие очень просто : Найти количество натуральных чисел до 10^N с суммой цифр меньших равных 22 и делящихся на 22. Ну давайте такие числа назовём счастливыми :P
Может есть какая то закономерность? Ну число делится на 22 если последняя цифра {0,2,4,6,8} и сумма цифр на нечетных местах равная сумме на четных.
А да еще числа до 10^18 тобеш N = 18, Час 1 cекунда, может ето что то разрулит :(
Ну и еще примерчик:
N = 2
Ответ: 4 => { 22,44,66,88 }
Нужно идти с другого конца.
Т.е. не генерировать числа, а пересчитать возможные расклады цифр, составляющих нужные числа.
Приведу пример для чисел до 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
)
Ясно, что число меньше 10^N
имеет количество цифр не больше N
Вам не нужно заморачиваться с большими числами. Тем более, что никуда не поместите эти числа, если допустим N>20
Обьявите количество чисел удовлетворяющих задаче unsigned answer = 0;
Создайте массив unsigned number[N] = {0};
нулей.
И в цикле, пока не достигнете начала массива прибавляйте последним двум элементам 2
, остаток от 10
записываем, а целую часть прибавляем к предыдущему элементу , пока он меньше чем 10(ну как на бумаге суммируете число и 22)
Проверяете, если сумма элементов меньше 22, то ++answer
Когда первый элемент массива перестанет быть однозначным числом, answer
будет ваш ответ.
P.S. С таким альгоритмом ваш код будет работать очень быстро даже при трехзначном значении N
. А если вам знаком std::valarray
, то задача решится проще и быстрее, поскольку он оптимизирован именно для числовых методов
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как можно скопировать все файлы, имена которых начинается с "stat" (есть примерно 500 файлов типа stat1txt stat2
Пытаюсь загрузить сохраненную строку в отдельном классе сл способом
Нужно разработать JavaFX приложение, в котором будет интеграция с сервисом Google MapЖелательно не просто html страничка, которую можно отобразить...