Algorithm 一个数字除以另一个数字多少次,剩下多少?
我需要Delphi中的一个算法来为指定的整数值生成分区Algorithm 一个数字除以另一个数字多少次,剩下多少?,algorithm,delphi,integer,Algorithm,Delphi,Integer,我需要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>
示例:对于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.
程序整数部分;
{$APPTYPE控制台}
函数分区(const-Total,Part:Integer):TArray;
变量
计数:整数;
Rem:整数;
i:整数;
开始
断言(总数>0);
断言(部分>0);
计数:=总div部分;
Rem:=总模块部分;
如果Rem=0,则
SetLength(结果、计数)
其他的
设置长度(结果,计数+1);
对于i:=0到Count-1 do
结果[i]:=部分;
如果是0那么
结果[计数]:=Rem;
结束;
变量
值:整数;
开始
对于分区(13,5)中的值
Writeln(值);
Readln;
结束。
使用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.
程序整数部分;
{$APPTYPE控制台}
函数分区(const-Total,Part:Integer):TArray;
变量
计数:整数;
Rem:整数;
i:整数;
开始
断言(总数>0);
断言(部分>0);
计数:=总div部分;
Rem:=总模块部分;
如果Rem=0,则
SetLength(结果、计数)
其他的
设置长度(结果,计数+1);
对于i:=0到Count-1 do
结果[i]:=部分;
如果是0那么
结果[计数]:=Rem;
结束;
变量
值:整数;
开始
对于分区(13,5)中的值
Writeln(值);
Readln;
结束。
除了最后一个数字外,其他数字是否都等于最大值?在这种情况下,您可以简单地使用n=max*(n div max)+(n mod max)
您尝试过吗?考虑到我只花了2分钟就解决了这个问题,以及这个问题的本质(它非常简短),这似乎是一个你需要自己完成的家庭作业。对不起,我搜索了它,但直到我读了《如何》才找到它。thnx很多..除了最后一个数字外,所有数字都等于最大值吗?在这种情况下,您可以简单地使用n=max*(n div max)+(n mod max)
您尝试过吗?考虑到我只花了2分钟就解决了这个问题,以及这个问题的本质(它非常简短),这似乎是一个你需要自己完成的家庭作业。对不起,我搜索了它,但直到我读了《如何》才找到它。太多了。。