如何生成无重复的随机数

rvpgvaaj  于 2022-10-16  发布在  其他
关注(0)|答案(1)|浏览(280)

简单的问题:
我希望生成从1到15(包括15)随机数,但我在生成的级数中不断得到重复。
我希望能够得到从1到15的每个数字的“随机顺序”。用Delphi编程语言。

nzk0hqpo

nzk0hqpo1#

这(如评论中提到的)使用Fisher-Yates算法很容易实现:

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;

上面的函数将为您提供一个动态整数数组,其中包含介于Min和Max(包括Min和Max)之间的随机数字顺序。
请记住在主窗体的FormCreate中调用Randomize以将PRNG(伪随机数生成器)初始化为一个相当随机的值。如果你不这样做,你每次都会得到相同的列表。

相关问题