Сообщение от рони
|
может быстрее подсчитать количество комбинаций нужной суммы исходя из количества мест нечётных и умножить на комбинацию чётных чисел?
|
Это само собой. Для начала можно решить задачу "влоб", работая только с нечетными разрядами (предполагаем, что самый младший разряд - первый, т.е. нечетный):
Например, при М = 5
ХХ
ХХ
Х считаем только красные (нечетные), проходя циклом от 100 до 999, потом домножаем на 10*10 вариантов черных (четных)
при М = 6 (Х
ХХ
ХХ
Х) красные будут от 000 до 999, домножаем на 9*10*10
Итого:
цикл for (var i = A; i <= B; ++i)
A = M%2 ? Math.pow(10, Math.ceil(M / 2) - 1) : 0
B = Math.pow(10, Math.ceil(M / 2)) - 1
вариантов черных: C = M%2 ? Math.pow(10, Math.floor(M / 2)) : 9 * Math.pow(10, M / 2 - 1)
Далее цикл поменять на более эффективный перебор сумм, позже напишу если время будет