如何生成这样的随机结果(30分)

  • 主题发起人 主题发起人 fly555
  • 开始时间 开始时间
F

fly555

Unregistered / Unconfirmed
GUEST, unregistred user!
请问:
比如:
如何在1-100这么100个整数中,随机生成10个数字,(注意:这10个数字是没有重复的)
 
randomize;
for i:=1 to 10 do
random(100);

就行了,注意第一行可保证没有重复的
 
我感觉没这么简单random(100) 前加个randomize就能保证不会重复吗?

strlst := TStringlist.create;
for i:=1 to 10 do begin
i := random(100);
if strlst.indexof(inttostr('i')) = -1 then
strlst.add(inttostr('i'))
else
while not (strlst.indexof(inttostr('i')) = -1) do
i := random(100);
end;
strlst.free;
 
哎,我给个方法吧,保证不重复,而且比较平均
for i:=0 to 9 do
begin
arrayiii:=i*10+random(9);//random(10)?随便吧
end;
 
randomize;不能保证不重复,所以每生成一个都必须进行检查,只有10个数,建议用数组
 
procedure TForm1.BitBtn1Click(Sender: TObject);
const
N=100;
var
B: Array[1..N] of Boolean;
i,m,j,x:integer;
s:string;
begin
for i:=1 to N do b:=false;
m:=10;
j:=0;
Randomize;
while j<m do
begin
x:=random(N)+1;
if b[x] then continue;
inc(j);
b[x]:=true;
end;

s:='';
for i:=1 to N do
if b then s:=s+inttostr(i)+#13#10;
showmessage(s);
end;
 
建立用集合,集合开始为空,每产生一个随机数后先检查该数是否已经在集合中存在,
若已有,则产生一个新的数,直到新的随机数不在集合中为止,将新产生的随机数放进集合,
直到集合中有10个数为止。
 
接受答案了.
 
后退
顶部