TYPE TIntArr = TArray<Integer>;
FUNCTION RandomList(Min,Max : Integer) : TIntArr;
VAR
I,J,K : Integer;
BEGIN
SetLength(Result,SUCC(Max-Min));
FOR I:=Min TO Max DO Result[I-Min+LOW(Result)]:=I;
FOR I:=HIGH(Result) DOWNTO SUCC(LOW(Result)) DO BEGIN
J:=RANDOM(I);
K:=Result[I]; Result[I]:=Result[J]; Result[J]:=K
END
END;
1条答案
按热度按时间nzk0hqpo1#
这(如评论中提到的)使用Fisher-Yates算法很容易实现:
上面的函数将为您提供一个动态整数数组,其中包含介于Min和Max(包括Min和Max)之间的随机数字顺序。
请记住在主窗体的FormCreate中调用Randomize以将PRNG(伪随机数生成器)初始化为一个相当随机的值。如果你不这样做,你每次都会得到相同的列表。