Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.01.2013, 13:22
Новичок на форуме
Отправить личное сообщение для Gambit228 Посмотреть профиль Найти все сообщения от Gambit228
 
Регистрация: 08.01.2013
Сообщений: 4

Задача по JS
Здравствуйте. Возникли небольшие проблемы с программой.
Напишите функцию, аргументом которой является натуральное число n, а результатом - функция, которая последовательно возвращает все возможные массивы натуральных чисел, сумма которых равна n. После перебора функция должна вернуть null
В книге Шеня нашел алгоритм, прочитал, попробовал написать программу
Считает неверно.
Ответить с цитированием
  #2 (permalink)  
Старый 08.01.2013, 13:50
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

http://www.proklondike.com/var/file/...my_Zadachi.rar
А. Шень: Программирование: теоремы и задачи

Если алгоритм отсюда = то укажите страницу и раздел.

Последний раз редактировалось Deff, 08.01.2013 в 13:56.
Ответить с цитированием
  #3 (permalink)  
Старый 08.01.2013, 15:13
Аватар для Дзен-трансгуманист
√₋̅₁̅
Отправить личное сообщение для Дзен-трансгуманист Посмотреть профиль Найти все сообщения от Дзен-трансгуманист
 
Регистрация: 18.06.2012
Сообщений: 385

Сообщение от Gambit228
все возможные массивы натуральных чисел
Вариант 1: Если порядок взаимного расположения чисел в массиве неважен (Разбиение числа)
function createPartitionIterator ( integer ) {

  if ( !isFinite( integer = +integer ) || integer < 1 || integer != integer ^ 0 ) {
    return null;
  }

  var layout = [ integer ];

  return function () {

    if ( !layout ) {
      return null;
    }

    var result, rest, last, offset = layout.length;

    while ( offset-- && layout[ offset ] == 1 ) {}

    if ( offset >= 0 ) {

      result = [].concat( layout );

      rest = layout.length - offset;
      last = --layout[ offset++ ];

      while ( rest > last ) {
        layout[ offset++ ] = last;
        rest -= last;
      }

      layout[ offset++ ] = rest;
      layout.length = offset;
    }

    else {

      result = layout;
      layout = null;
    }

    return result;
  }
}

function test ( integer ) {

  var text = '';
  var next = createPartitionIterator( integer );
  var layout;

  while ( layout = next() ) {
    text += layout + '\n';
  }

  alert( text );
}

test( 2 );
test( 5 );
test( 7 );
test( 10 );
__________________

Гейзенберг, возможно, читал этот тред.

Последний раз редактировалось Дзен-трансгуманист, 08.01.2013 в 15:22.
Ответить с цитированием
  #4 (permalink)  
Старый 08.01.2013, 15:43
Новичок на форуме
Отправить личное сообщение для Gambit228 Посмотреть профиль Найти все сообщения от Gambit228
 
Регистрация: 08.01.2013
Сообщений: 4

2.4.1
Ответить с цитированием
  #5 (permalink)  
Старый 08.01.2013, 15:43
Новичок на форуме
Отправить личное сообщение для Gambit228 Посмотреть профиль Найти все сообщения от Gambit228
 
Регистрация: 08.01.2013
Сообщений: 4

Раздел 2.4.1
Ответить с цитированием
  #6 (permalink)  
Старый 08.01.2013, 15:45
Новичок на форуме
Отправить личное сообщение для Gambit228 Посмотреть профиль Найти все сообщения от Gambit228
 
Регистрация: 08.01.2013
Сообщений: 4

Вау. Написали Вы, конечно, классно, только малопонятно(
Ответить с цитированием
  #7 (permalink)  
Старый 08.01.2013, 16:10
Аватар для Дзен-трансгуманист
√₋̅₁̅
Отправить личное сообщение для Дзен-трансгуманист Посмотреть профиль Найти все сообщения от Дзен-трансгуманист
 
Регистрация: 18.06.2012
Сообщений: 385

Сообщение от Gambit228
все возможные массивы натуральных чисел
Вариант 2: Если порядок взаимного расположения чисел в массиве важен (Композиция числа)
function createCompositionIterator ( integer ) {

  if ( !isFinite( integer = +integer ) || integer < 1 || integer != integer ^ 0 ) {
    return null;
  }

  var layout = Math.pow( 2, integer - 1 );

  return function () {

    if ( !layout ) {
      return null;
    }

    layout--;

    var result = [], bitmap = layout, last = 1, left = integer;

    while ( left-- ) {

      if ( bitmap % 2 ) {
        last++;
        bitmap--;
      }

      else {
        result.unshift( last );
        last = 1;
      }

      bitmap /= 2;
    }

    return result;
  }
}

function test ( integer ) {

  var text = '';
  var next = createCompositionIterator( integer );
  var layout;

  while ( layout = next() ) {
    text += layout + '\n';
  }

  alert( text );
}

test( 3 );
test( 4 );
test( 5 );
test( 6 );
__________________

Гейзенберг, возможно, читал этот тред.
Ответить с цитированием
  #8 (permalink)  
Старый 08.01.2013, 16:15
Аватар для Дзен-трансгуманист
√₋̅₁̅
Отправить личное сообщение для Дзен-трансгуманист Посмотреть профиль Найти все сообщения от Дзен-трансгуманист
 
Регистрация: 18.06.2012
Сообщений: 385

Сообщение от Gambit228
классно, только малопонятно
А практическая математика она вся такая - классная и малопонятная.)
__________________

Гейзенберг, возможно, читал этот тред.
Ответить с цитированием
  #9 (permalink)  
Старый 08.01.2013, 19:28
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Дзен-трансгуманист Посмотреть сообщение
А практическая математика она вся такая - классная и малопонятная.)
ну не знаю

while (!stopCondition(X0, X1)) {
            F1 = F(X1) - Y;
            F0 = F(X0) - Y;

            DELTA_X = X1 - X0;
            DELTA_F = F1 - F0;

            cache = X1;
            X1 = X1 - F1 * DELTA_X / DELTA_F;
            X0 = cache;
        }


отрывок моего кода. см. метод хорд

тело цикла - эта формула


условие остановки (stopCondition) :


по-моему, всё понятно


простите, вредничаю )

Последний раз редактировалось melky, 08.01.2013 в 19:31.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не получается вставить код js в HTML garmoni Элементы интерфейса 3 05.09.2013 05:56
Конфликтуют js скрипты в Opera romka AJAX и COMET 2 28.05.2012 15:32
Разное оформление для посетителей с JS и без fry2 Events/DOM/Window 13 03.02.2012 16:45
Картинка обрабатывается js 4yBaK Общие вопросы Javascript 10 11.09.2011 09:28
помогите задать переменную в js bsgroupua Общие вопросы Javascript 3 01.02.2010 18:28