Изменения

Перейти к: навигация, поиск

Получение следующего объекта

2000 байт добавлено, 21:56, 6 декабря 2013
м
Добавлен алгоритм получения следующего разбиения на слагаемые.
|-
|'''1'''||'''3'''||'''4'''||'''5'''||''' '''||Следующее сочетание.
|}
 
== Специализация алгоритма для генерации следующего разбиения на слагаемые ==
 
* Увеличим предпоследнее число на 1, уменьшим последнее на 1.
* Если предпоследний элемент стал больше последнего, то увеличиваем предпоследний элемент на величину последнего.
* Если предпоследний элемент меньше последнего, то проверяем, можем ли мы разбить последний элемент на сумму предпоследних. Если да – разбиваем, пока предпоследний*2 < последнего.
 
<code>
// b – массив чисел разбиения, dlin – его размер.
b[dlin] := b[dlin] - 1;
b[dlin - 1] := b[dlin - 1] + 1;
'''if''' b[dlin - 1] > b[dlin] '''then'''
'''begin'''
b[dlin - 1] := b[dlin - 1] + b[dlin];
dlin := dlin - 1;
'''end'''
'''else'''
'''begin'''
i := 0;
'''while''' b[dlin - 1] * 2 <= b[dlin + i] '''do'''
'''begin'''
b[dlin + i + 1] := b[dlin + i] - b[dlin - 1];
b[dlin + i] := b[dlin - 1];
i := i + 1;
'''end;'''
dlin := dlin + i;
'''end;'''
'''Выводим ответ.'''
</code>
 
=== Пример работы ===
{| class="wikitable" border = 1
|1||style="background:#FFCC00"|1||style="background:#FFCC00"|7|| || ||Прибавим 1 + 1, вычтем 7 - 1.
|-
|1||style="background:#FFCC00"|2||style="background:#FFCC00"|6|| || ||Проверяем: 2<6, значит разбиваем 6 пока оно не станет <4
|-
|1||2||style="background:#FFCC00"|2||style="background:#FFCC00"|4|| ||
|-
|1||2||2||style="background:#FFCC00"|2||style="background:#FFCC00"|2||
|-
|'''1'''||'''2'''||'''2'''||'''2'''||'''2'''||Следующее разбиение на слагаемые числа 9.
|}
76
правок

Навигация