《Delphi产生不重复随机数的简便算法》由会员分享,可在线阅读,更多相关《Delphi产生不重复随机数的简便算法(5页珍藏版)》请在金锄头文库上搜索。
1、Delphi产生不重复随机数的简便算法岸虽然有点晚,还是贴上自己的一个想法,供大家参考交流!基本思路是:先初始化一个要选择随机数范围加1的数组,其中a0保存可用的随机数的个数,然后在a0 范围内随机选取一个数,并把这个数与数字后面的数向交换,并将a0减1,直到最后全部取完,数组保存 的是所取随机数顺序的倒序.定义常量和变量constNUM_COUNT = 20;vara: array0.NUM_COUNT of Integer;初始化vari: Integer;begina0:= NUM_COUNT;for i:=1 to NUM_COUNT doai := i;end;得到不重复随机数,全部
2、取完返回-1function GetRandom: Integer;varres, tmp: Integer;beginif a0= 0 thenbeginResult := -1;Exit;end;Randomize;tmp := Random(a0)+1;Result := atmp;atmp := aa0;aa0:=Result;a0:= a0-1;end;测试 procedure TForm1.Button1Click(Sender: TObject);varRan: Integer;beginRan := GetRandom;if Ran -1 thenMemo1.Lines.Add
3、(IntToStr(Ran)elseMemo1.Lines.Add(随机数已经全部取完!); end;附完整的源代码:unit Unitl;interface usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;constNUM_COUNT =20;typeTForm1 = class(TForm)Button1: TButton;Memo1: TMemo;procedure FormCreate(Sender: TObject);procedure Bu
4、tton1Click(Sender: TObject);private( Private declarations public( Public declarations end;varForm1: TForm1;implementation($R *.dfmvara: array0.NUM_COUNT of Integer;procedure TForm1.FormCreate(Sender: TObject);vari:Integer;begina0:= NUM_COUNT;for i:=1 to NUM_COUNT doai := i;end;function GetRandom: In
5、teger;varres, tmp: Integer;beginif a0=0 thenbeginResult :=-1;Exit;end;Randomize;tmp :=Random(a0)+1;Result:=atmp;atmp:=aa0;aa0:= Result;a0:=a0-1;end;procedure TForm1.Button1Click(Sender: TObject);varRan:Integer;beginRan := GetRandom;if Ran -1 thenMemo1.Lines.Add(IntToStr(Ran)elseMemo1.Lines.Add(随机数已经全部取完!);end;end.