关于取不重复的随机数问题
我想从个数中随机取n个数,而且这n个数要不重复的。代码如下:
procedure TForm1.ChoosenumClick(Sender: TObject);var m,n: integer; i,k: integer; t: array [1..30] of boolean;begin for k:=1 to 30 do t[k]:=False; n:=strtoint(Edit_num.Text); if Label3.Caption<>'' then Label3.Caption:=''; for i:=1 to n do begin m:=Random(strtoint(Edit_fanwei.Text)); if t[m]=True then // i:=i-1 else //n:=n+1; begin Label3.Caption:=Label3.Caption+' '+inttostr(m); t[m]:=True; end; end; { repeat m:=Random(strtoint(Edit_fanwei.Text)); if t[m]=True then i:=i-1 else begin Label3.Caption:=Label3.Caption+' '+inttostr(m); t[m]:=True; i:=i+1; end; until(i>=n); }end;procedure TForm1.Button1Click(Sender: TObject);var i,j: integer; vstrList: TStringList;begin Memo1.Lines.Clear; vstrList := TStringList.Create; try i := 0; while i<>StrToInt(Edit1.Text) do //当取出N个数时就跳出循环 begin Randomize; j := Random(StrToInt(Edit2.Text)); while true do begin if vstrlist.IndexOf(inttostr(j))=-1 then //如果不重复就跳出 begin vstrList.Add(inttostr(j)); i := i+ 1; break; end; j := Random(StrToInt(Edit2.Text)); end; end; memo1.Lines.Add(vStrList.Text); finally vstrlist.Free; end;end;