Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 一个数字除以另一个数字多少次,剩下多少?_Algorithm_Delphi_Integer - Fatal编程技术网

Algorithm 一个数字除以另一个数字多少次,剩下多少?

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>

我需要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.
程序整数部分;
{$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分钟就解决了这个问题,以及这个问题的本质(它非常简短),这似乎是一个你需要自己完成的家庭作业。对不起,我搜索了它,但直到我读了《如何》才找到它。太多了。。