gpt4 book ai didi

德尔福除法与其余部分均分(MOD)

转载 作者:行者123 更新时间:2023-12-02 07:57:23 30 4
gpt4 key购买 nike

我有一个数学问题,我尝试用 Delphi 函数来解决。我试图将一个整数分成(几乎)相等的部分。示例:

您有 10 个测试用例,您希望分 3 部分执行它们。因此,平衡工作负载的最佳方法是执行 3、3 和 4,而不是 1、1 和 8。

procedure calc_stream_numbers;
var div_res,rest:double;
total,streams:integer;
begin
total := 10;
streams := 3;
div_res := total DIV streams;
rest := total MOD streams;
showmessage('Items: ' +IntToStr(total)+#13#10+
'Streams: '+IntToStr(streams)+#13#10+
'Result: '+FloatToStr(div_res)+
'Rest: '+FloatToStr(rest));
end;

这给了我除法结果 10/3 = 3 (Rest 1) 所以我可以执行 3 x 3 个测试用例,总共 9 个。要执行全部 10 个流,我必须将剩余的一个添加到 3 个流中的任意一个。但是如果你有一个更复杂的例子..

我确信有一个数学表达式,但我必须承认,我没有任何线索。也许你能启发我这样的划分是如何调用的以及是否有任何内置的delphi函数。

最佳答案

这是:http://en.wikipedia.org/wiki/Bresenham's_line_algorithm

一个维度是工作负载量,另一个维度是工作人员数量

<小时/>

嗯,2D 图形的目标是养眼,因此在“短”片段中公平地分配“长”片段。对于您的情况,我们可以将所有“长”的都偏向一端。

function SplitIntoEqualParts(Total, Count: Integer): TArray<Integer>;
var
i: Integer;
delta, delta1, extra: Word;
begin
Assert( Count < High(Word) ); // RTL DivMod limitation
SetLength(Result, Count);

DivMod(Total, Count, delta, extra);
// one division operation is 2 times faster than two separate operations :-D
delta1 := Succ(delta);

for i := 0 to extra-1 do
Result[i] := delta1;
for i := extra to Count-1 do
Result[i] := delta;
end;

关于德尔福除法与其余部分均分(MOD),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30782474/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com