Обсуждение участника:Mogikan

Материал из Викиконспекты
Перейти к: навигация, поиск

// b – список, содержащий разбиение данного числа, length – его размер.
function nextPartition(var b:list): list;
 var i : integer;
  begin   
   b[length] := b[length] - 1;
   b[length - 1] := b[length - 1] + 1;
   if b[length - 1] > b[length] then
    begin
      b[length - 1] := b[length - 1] + b[length];
      length := length - 1;
    end
   else
    begin
     i := 0;
     while b[length - 1] * 2 <= b[length + i] do
      begin
       b[length + i + 1] := b[length + i] - b[length - 1];
       b[length + i] := b[length - 1];
       i := i + 1;
      end;
     length := length + i;
    end;
   return(b[1..length]);
  end;