一个数字分成多少次,剩下多少?

时间:2013-02-21 11:18:25

标签: algorithm delphi integer

我需要Delphi中的算法来为指定的整数值生成分区。

示例:对于13,如果将5指定为分区的最大值,则将给出5,5,3;如果将4指定为最大分区值,则结果应为4,4,4,1,依此类推。

1 个答案:

答案 0 :(得分:6)

使用divmod解决问题非常简单。这是一个我认为不需要进一步解释的示例程序:

program IntegerPartitions;
{$APPTYPE CONSOLE}

function Partitions(const Total, Part: Integer): TArray<Integer>;
var
  Count: Integer;
  Rem: Integer;
  i: Integer;
begin
  Assert(Total>0);
  Assert(Part>0);

  Count := Total div Part;
  Rem := Total mod Part;
  if Rem=0 then
    SetLength(Result, Count)
  else
    SetLength(Result, Count+1);
  for i := 0 to Count-1 do
    Result[i] := Part;
  if Rem<>0 then
    Result[Count] := Rem;
end;

var
  Value: Integer;

begin
  for Value in Partitions(13, 5) do
    Writeln(Value);
  Readln;
end.