我需要delphi中的一个算法来为指定的整数值生成分区。
例如:对于13,如果将5指定为分区的最大值,则它将给出5,5,3;如果将4指定为最大分区值,则结果应为4,4,4,1,依此类推。
最佳答案
使用div
和mod
解决问题非常简单。下面是一个我认为不需要进一步解释的示例程序:
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.
关于algorithm - 一个数字分为多少个,剩下多少?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15000901/