我想写一个函数,存放指定范围内产生的随机数,到一个数组里,但是每次产生的随机数不能重复。例如:我想产生2-5之间的随机数(包括2和5本身,也就是2、3、4、5)存放在一个数组里,每次产生的这4个随数,不能重复,也不能和上一次产生的顺序相同。谢谢!!!
解决方案 »
- filesize() 求这个函数的例子
- 我的生命要结束了吗?
- 怎样获得执行select语句后得到的记录个数?
- 这是一个可以设置窗体边框颜色的函数,大家能帮忙设计一个可以删除该窗体边框颜色的函数吗?
- 【求助】dll中传递Thandle TADOConnection 等对象时,需要注意什么,望高手解答下??????
- 一个有关导出EXCEL文件的问题,急,请高手赐教!
- mdi问题.急.
- QRBand能否自动换页的问题。
- 在三层结构中,怎样把ado客户端数据集中的数据导出至excel,来者有分!
- 一个有关通信的问题?
- 谁有Indy的那两个Demo??给我发个吧
- 如何取得DateTimePicker所显示日期对应本周从周一到周日的日期?
可以先获得一个唯的值,再经过算法变成一定范围内的数
比如获得时间,然后再算,算法可以自己吧。
//然后每次从其中随机抽取一个元素,并删除~~
//参考如下代码~~
function Collocate(mStrings: TStrings; mStr: string): Boolean; { 全排列 }
procedure pCollocate(mLeft, mRight: string);
var
I, L: Integer;
Temp: string;
begin
L := Length(mLeft);
if L = 0 then
mStrings.Add(mRight)
else for I := 1 to L do begin
Temp := mLeft;
Delete(Temp, I, 1);
pCollocate(Temp, Concat(mRight, mLeft[I]));
end;
end;
begin
Result := False;
if not Assigned(mStrings) then Exit;
mStrings.BeginUpdate;
try
mStrings.Clear;
pCollocate(mStr, '');
finally
mStrings.EndUpdate;
end;
Result := True;
end; { Collocate }procedure TForm1.FormCreate(Sender: TObject);
begin
FStringList := TStringList.Create;
Randomize; //播下随机种子
Collocate(FStringList, '2345'); //得到'2345'所以的排列,放在FStringList中
end;function StringSwell(mString: string;
mDelimiter: string = ''): string; { 格式处理 }
var
I: Integer;
begin
Result := '';
for I := 1 to Length(mString) do
Result := Result + mDelimiter + mString[I];
Delete(Result, 1, Length(mDelimiter));
end; { StringSwell }procedure TForm1.FormDestroy(Sender: TObject);
begin
FStringList.Free;
end;procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
if FStringList.Count <= 0 then
begin
ShowMessage('已经没有元素可以抽取');
Exit;
end;
I := Random(FStringList.Count); //从所剩的元素中随机抽取
ShowMessage('本次抽取的元素为:' + StringSwell(FStringList[I], ','));
FStringList.Delete(I); //抽取后就删除掉
end;