把1..350分成25段,每段ramdom一个就最平均啦,哈哈。(说笑)下面这个笨算法也只用了0.6秒 var a: array[1..350] of integer; n, i, r: Integer; s: String; d1,d2: TDateTime; e: Extended; begin d1:= Now; for n:= 1 to 380 do begin for i:= 1 to 350 do a[i]:= i; s:= ''; i:= 1; while (i<25) do begin r:= Random(349)+1; if (a[r]<>0) then begin s:= s + IntToStr(a[r]) + ' '; a[r]:= 0; Inc(i); end; end; m.Lines.Add(s); end; d2:= Now ; e:= (d2-d1)*86400; m.Lines.Add('Use:' + FloatToStr(e)) end;
var
a: array[1..350] of integer;
n, i, r: Integer;
s: String;
d1,d2: TDateTime;
e: Extended;
begin
d1:= Now; for n:= 1 to 380 do
begin for i:= 1 to 350 do
a[i]:= i; s:= '';
i:= 1;
while (i<25) do
begin
r:= Random(349)+1;
if (a[r]<>0) then
begin
s:= s + IntToStr(a[r]) + ' ';
a[r]:= 0;
Inc(i);
end;
end; m.Lines.Add(s); end; d2:= Now ;
e:= (d2-d1)*86400;
m.Lines.Add('Use:' + FloatToStr(e))
end;
书上说Random(i)返回值是0..i-1, Random(349)+1的值就是1..349,少一个350啊,难道我的书错了?
还要将结果以5*5方格显示列印出来,共380张,如何将350*25个数字按此要求存到SQL数据库中呢?急啊~~~
int temp = 0;
int[] randArray=new int[350];
for(int i=0; i<350 ; i++){
randArray[i] = (temp + Math.abs(rand%(350-i)))%350;
temp = randArray[i]+1;
}随便想出来的一个算法 没有测试过 如果不出错的话
最后 randArray[]里面就应该是 0——349 350个随即数字了