Moore
Moore

Reputation: 233

How many times does one number divide into another, and how much is left over?

I need an algorithm in Delphi to generate partitions for a specified integer value.

Example: for 13 if 5 is specified as the max value for partition it will give 5,5,3; if 4 is specified as max partition value the result should be 4,4,4,1, and so on.

Upvotes: 1

Views: 276

Answers (1)

David Heffernan
David Heffernan

Reputation: 612993

It's simple enough to solve the problem using div and mod. Here's an example program that I don't think needs any further explanation:

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.

Upvotes: 6

Related Questions