***随机选择的问题!***

AiFei 2000-08-20 11:28:00
请教:
现有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个数
请指教

我用random()和randomize,但每组随机数可能会有重复!


...全文
161 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lotto 2000-08-21
  • 打赏
  • 举报
回复
procedure shuiji(n:integer);
var value:array[1..5] of integer;
i,j,v:integer;
flag:boolean;
begin
j:=1;
value[1]:=random(n);
for i:=2 to 5 do
begin
repeat
v:=random(n);
flag:=true;
for i:=1 to j do
if v=value[i] then flag:=false;
until flag
j:=j+1;
value[j]:=v;
end;
//清空listbox
//赋值
.....
end;
Michaelyfj 2000-08-21
  • 打赏
  • 举报
回复
呜呼...
AiFei 2000-08-20
  • 打赏
  • 举报
回复
To Michaelyfj:
Thank you!
Michaelyfj 2000-08-20
  • 打赏
  • 举报
回复
我提供了如下算法,这是一个Pas单元文件,只要把你的pas文件覆盖掉即可,

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
ListBox1: TListBox;
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
procedure GetNum(var h : integer);
end;

var
Form1: TForm1;
Numlist : TStrings;

const
n = 10000;
var
num : array[0..n-1] of string;//=('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13');

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
i, m : integer;
h, rnd : integer;
begin
m := strtoint(edit1.text);
if m > n then
begin
showmessage('m>n... will exit');
exit;
end;
numlist.Clear;
numlist.Add(''); //必不可少
randomize;
for i := 1 to m do
begin
rnd := Random(n);
getnum(rnd);
numlist.Add(num[rnd]);
end;
numlist.Delete(0);
ListBox1.Items.Assign(numlist);
end;

procedure TForm1.GetNum(var h: integer); //调用递归过程
begin
if numList.IndexOf(num[h])>0 then //判断是否重复
begin
h := random(n); //如果重复,则重新获取随机数
GetNum(h);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
i : integer;
begin
for i := 0 to n-1 do
num[i] := inttostr(i+1); //初始化数组
numList := TstringList.Create;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
numlist.free;
end;

end.

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧