2013-02-21 90 views
1

我需要一個Delphi中的算法來爲指定的整數值生成分區。一個數字分成多少次,剩下多少?

例如:對於13,如果5指定爲分區的最大值,它將給出5,5,3;如果4指定爲最大分區值,則結果應爲4,4,4,1,依此類推。

+5

除了最後一個數字都等於最大值嗎?在這種情況下,您可以簡單地使用'n = max *(n div max)+(n mod max)' – CodesInChaos 2013-02-21 11:21:45

+3

您是否嘗試過?鑑於我剛剛在2分鐘內解決了這個問題,而且它的性質(它非常簡短),它看起來像是一項需要完成自己的家庭作業。 – Glenn1234 2013-02-21 11:25:07

+0

對不起,我搜索了它,但沒有找到它直到閱讀Howto。 thnx很多.. – Moore 2013-02-22 10:07:28

回答

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.