Алгоритм для создания суммы чисел.
День добрый, форумчане!
Передо мной стоит такая задача: Есть некое число X (int). X>=1 && X<=9; Необходимо вывести все варианты групп чисел, удовлетворяющих тому же промежутку и типу, что и Х, которые в сумме дадут X. Например, если X == 5, а выводить будем массивами, то функция должна вернуть примерно следующее: arr = [ [5], [1,4], [4,1], [2,3], [3,2], [1,1,3], [1,3,1], [3,1,1], [1,2,2], [2,1,2], [2,2,1], [1,1,1,2], [1,1,2,1], [1,2,1,1], [2,1,1,1], [1,1,1,1,1] ] Собственно, код не интересует, есть у кого-то идеи относительно алгоритма реализации подобного? Или предположение о том, как правильно спросить у гугла?) |
|
:blink: Дежавю
|
рони,
ага :) |
рони,
уже было? |
Viral,
http://javascript.ru/forum/misc/6192...tml#post411108 <script> function fn(b, d) { for (var a = Array(b + 1).join("1").split(""), c = []; a[0] != b;) a.reduce(function(a, b) { return +a + +b }, 0) < b ? a.push(1) : (a.every(function(a) { return +a <= d }) && c.push(a.slice()), a.pop(), a[a.length - 1]++); console.log(c) c.push([b]) return c.sort(function(a, b) { return +a.join('') - +b.join('') }) }; document.write(fn(5,5).join('<br>')+ "<br>Всего: "+ fn(5,5).length); </script> осторожно в массиве есть не цифры а строки , если нужны именно цифры заменить формирование первоначального массива, Цитата:
просто :) |
рони,
Спасибо |
Viral,
<script> function fn(b, d) { for (var a = [1,1,1,1,1,1,1,1,1].slice(b), c = []; a[0] != b;) a.reduce(function(a, b) { return +a + +b }, 0) < b ? a.push(1) : (a.every(function(a) { return +a <= d }) && c.push(a.slice()), a.pop(), a[a.length - 1]++); c.push([b]) return c.sort(function(a, b) { return +a.join('') - +b.join('') }) }; document.write(fn(5,5).join('<br>')+ "<br>Всего: "+ fn(5,5).length); </script> |
Часовой пояс GMT +3, время: 20:26. |