Сообщение от 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.
|