1
我需要一個Delphi中的算法來爲指定的整數值生成分區。一個數字分成多少次,剩下多少?
例如:對於13,如果5指定爲分區的最大值,它將給出5,5,3;如果4指定爲最大分區值,則結果應爲4,4,4,1,依此類推。
我需要一個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.
除了最後一個數字都等於最大值嗎?在這種情況下,您可以簡單地使用'n = max *(n div max)+(n mod max)' – CodesInChaos 2013-02-21 11:21:45
您是否嘗試過?鑑於我剛剛在2分鐘內解決了這個問題,而且它的性質(它非常簡短),它看起來像是一項需要完成自己的家庭作業。 – Glenn1234 2013-02-21 11:25:07
對不起,我搜索了它,但沒有找到它直到閱讀Howto。 thnx很多.. – Moore 2013-02-22 10:07:28