|
08.01.2013, 14:22
|
Новичок на форуме
|
|
Регистрация: 08.01.2013
Сообщений: 4
|
|
Задача по JS
Здравствуйте. Возникли небольшие проблемы с программой.
Напишите функцию, аргументом которой является натуральное число n, а результатом - функция, которая последовательно возвращает все возможные массивы натуральных чисел, сумма которых равна n. После перебора функция должна вернуть null
В книге Шеня нашел алгоритм, прочитал, попробовал написать программу
Считает неверно.
|
|
08.01.2013, 14:50
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
http://www.proklondike.com/var/file/...my_Zadachi.rar
А. Шень: Программирование: теоремы и задачи
Если алгоритм отсюда = то укажите страницу и раздел.
Последний раз редактировалось Deff, 08.01.2013 в 14:56.
|
|
08.01.2013, 16: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 в 16:22.
|
|
08.01.2013, 16:43
|
Новичок на форуме
|
|
Регистрация: 08.01.2013
Сообщений: 4
|
|
2.4.1
|
|
08.01.2013, 16:43
|
Новичок на форуме
|
|
Регистрация: 08.01.2013
Сообщений: 4
|
|
Раздел 2.4.1
|
|
08.01.2013, 16:45
|
Новичок на форуме
|
|
Регистрация: 08.01.2013
Сообщений: 4
|
|
Вау. Написали Вы, конечно, классно, только малопонятно(
|
|
08.01.2013, 17: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 );
__________________
Гейзенберг, возможно, читал этот тред.
|
|
08.01.2013, 17:15
|
|
√₋̅₁̅
|
|
Регистрация: 18.06.2012
Сообщений: 385
|
|
Сообщение от Gambit228
|
классно, только малопонятно
|
А практическая математика она вся такая - классная и малопонятная.)
__________________
Гейзенберг, возможно, читал этот тред.
|
|
08.01.2013, 20:28
|
sinistral
|
|
Регистрация: 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 в 20:31.
|
|
|
|