БлогNot. Разбиение числа на Javascript

Разбиение числа на 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 [3294 просмотра]


теги: javascript числа сервис

К этой статье пока нет комментариев, Ваш будет первым