Разбиение числа на Javascript
Статья есть в Википедии, а здесь - небольшой сервис, выводящий все разбиения для выбранного из списка числа. Всю работу выполняет рекурсивная функция partition
, исходник приложения прикреплён ниже.
<form name="partitionForm"> <p>Выберите значение: <select id="partitionLimit" onchange="selectLimit(this.options[this.selectedIndex].value);"> </select> <input type="button" value="Выполнить" onclick="doPartition();"> <input type="button" value="Очистить" onclick="doClearPartition();"> </p> <p>Результат: <br> <textarea id="partitionResult" rows="12" cols="74" readonly></textarea></p> </p> </form> <script type="text/javascript"> var limit = 35; //верхняя граница списка function doPartition () { var partitionResultString = '', count = 0; function partition(n, limit, str) { var i; if (n > 0) { var k = Math.min(n, limit); for (i = k; i > 0; i--) partition (n-i, i, str + '+' + i); } else { partitionResultString += str + '\n'; count++; } return { string: partitionResultString, count: count }; } var n = parseInt (document.partitionForm.partitionLimit.options [document.partitionForm.partitionLimit.selectedIndex].value); if (n<1 || n>limit) { n = limit-5; doClearPartition (); } var partition = partition (n, n, n + '='); document.partitionForm.partitionResult.value = 'Всего: ' + partition.count + '\n' + partition.string; } function doClearPartition() { document.partitionForm.partitionResult.value = ''; document.partitionForm.partitionLimit.selectedIndex = limit-5; } var select = document.getElementById('partitionLimit'); for (var i = limit; i > 0; i--) { var opt = ''+i; var el = document.createElement('option'); el.textContent = opt; el.value = opt; if (i==5) el.selected = true; select.appendChild (el); } </script> <noscript><p>Нужен включённый Javascript для работы приложения</p></noscript>
Статьи по теме из блога: варианты получения суммы из комбинации заданных слагаемых, количество перестановок и комбинаций символов, мощность множества для массива.
14.12.2017, 10:42 [3407 просмотров]