O
optn3
Unregistered / Unconfirmed
GUEST, unregistred user!
代码意为:从X到Y范围内,随机选z个不相同的数.spinedit1为x,spinedit2为y,spinedit3为z.如果从:1-10000中,选25个数.我这里选到的最大数都在3000以下,为什么?<br>代码有点垃圾,望高手指点指点?提高速度.多谢.<br><br>procedure TForm1.rdmselect(min,all, want: integer; var got: array of integer); //随机过程......<br>//all:题目总数<br>//want:取多少个<br>//got:存放结果<br>var<br>rdmarray,sortarray:array of integer;//动态数组<br>i,j,temp:integer;//整形变量<br>begin<br>setlength(rdmarray,all);//设定动态数组大小<br>setlength(sortarray,all);<br>randomize;//初始化随即种子<br><br>for i:= 1 to all do<br> begin<br> rdmarray[i-1]:= random(100);<br> sortarray[i-1]:=i+min;//该数组值为1、2。。。all<br><br> end;<br><br><br>for i:=0 to all-2 do//冒泡排序,换成选择更好。目的:按照随机数组大小排序,同时标志数组也随之改变,最终标志数组为随机数组按大小排序的“名次”<br> for j:=i+1 to all-1 do<br> if rdmarray>rdmarray[j] then<br> begin<br> temp:=rdmarray;<br> rdmarray:=rdmarray[j];<br> rdmarray[j]:=temp;<br> temp:=sortarray;<br> sortarray:=sortarray[j];<br> sortarray[j]:=temp;<br> end;<br><br>for i:=0 to want-1 do//要几个取几个<br> got:=sortarray;<br><br>end;<br><br>procedure TForm1.Button1Click(Sender: TObject); //随机<br>var<br>a:array of integer;<br>i:integer;<br>sl1 : TStrings;<br>begin<br> sl1 := TStringList.Create;<br> setlength(a,spinedit3.Value);//edtwant:输入:取出多少个<br> rdmselect(spinedit1.Value-1,spinedit2.Value-spinedit1.Value+1,spinedit3.Value,a);//edtall:输入:总共多少个<br> memo1.Lines.Clear;//存放结果<br><br> for i:=low(a) to high(a) do<br> sl1.Add(inttostr(a));<br> memo1.Text := sl1.Text;<br> sl1.Clear;<br> sl1.Free;<br>end;