随机选择的问题!(急)(50分)

F

FlyAway

Unregistered / Unconfirmed
GUEST, unregistred user!
请教:
现有n个整数,要求每次从中随机选择m(0<m<=n)个数,且每次选择的m个数均不重复,如下例:
n个数: 1,2,3,4,5,6,7,8,9 (n=9), 从中选5个数(m=5),如: 3,6,1,9,2
Form如下:
一个ListBox(显示每次选择的5个数),
一个Button (每按一次做一次选择),
一个Edit (输入每次要选择数的个数<=n)
每按一下,先将上一次ListBox.items中的数清掉,然后显示该次的m个数
请指教

 
function Random [ ( Range: Integer) ];
看delphi的help
 
用random函数可以取出随机数.
 
在源文件里看到你的问题了,注意不要用&amp;lt;,会备当成HTML
请教:
现有n个整数,要求每次从中随机选择m(0&amp;lt;m&amp;lt;=n)个数,且每次选择的m个数均不重复,如下例:
n个数: 1,2,3,4,5,6,7,8,9 (n=9), 从中选5个数(m=5),如: 3,6,1,9,2
Form如下:
一个ListBox(显示每次选择的5个数),
一个Button (每按一次做一次选择),
一个Edit (输入每次要选择数的个数<=n)
每按一下,先将上一次ListBox.items中的数清掉,然后显示该次的m个数

<font color=red>答案:把这n个数放在数组里不就很容易解决了么?</font>
 
谢谢!
我用的random()和randomize,但选出的数会有重复!
 
自己判断,若是和已经取出的相同了就不用它而继续选
 
没看清楚问题,赫赫,同意wjiachun
 
按下面这样写,应该可以
procedure TForm1.Button1Click(Sender: TObject);
var s:array of integer;
i,j,m,n:integer;
tj:boolean;
begin
n:=9;
m:=strtoint(edit1.text);
setlength(s,m);
listbox1.Clear;
for i:=0 to m-1 do
begin
s:=random(n);
if i>0 then
begin
while true do
begin
for j:=0 to i-1 do
begin
tj:=false;
if s=s[j] then
begin
tj:=true;
break;
end;
end;
if tj=true then
s:=random(n)
else
break;
end;
end;
listbox1.items.Add(inttostr(s));
end;
end;
 
谢谢wjiachun,wind_cloudy, 冰川的帮助,
感谢wind_cloudy提供的源代码。
这是我第一次上“大富翁”,谢谢大家!

 
多人接受答案了。
 
顶部