大家好:
现有随机数1、2、3、4、5、6、7、8、10、11、12、1200。如何随机的从里面抽出N个不重复的数。其中N是变化的.
谢谢!
现有随机数1、2、3、4、5、6、7、8、10、11、12、1200。如何随机的从里面抽出N个不重复的数。其中N是变化的.
谢谢!
解决方案 »
- 关于数据实时获取,实时状态更新,多个线程扫描数据库问题
- delphi dxdbgrid 控件滚动条问题
- DEPHI7下的特快专递
- 我如何让listview不选中某一行?
- 一个I/O21错误,大家来看看是什么原因导致的?
- 这样的insert sql语句怎么写
- (ADO)从数据库里读出数据在DBGRID里显示,如何在数据库连接断开之后DBGRID仍然显示读出的数据。
- ★★有关字符数组,PChar和TIdUDPServer的问题★★
- c/s结构中的数据提交问题
- delphi数据库中的图片如何更新?
- MODI-->Object hasn't been initialized and can't be used yet?
- 问个内存溢出的问题
循环洗牌:
for i:=1 to n do
begin
p:=random(n)+1;
t:=r[p];
r[p]:=r[i];
r[i]:=t;
end;
再取数组的前m个,肯定是随机且不重复的
//以30个数为例
var
aaa:array[1..30] of integer;
i,j,n: integer;
s: integer;
begin
randomize;
for i:=1 to 30 do
begin
aaa[i]:=random(100);
end;
for i:=1 to 29 do
begin
for j:=i+1 to 30 do
begin
if aaa[i]=aaa[j] then
begin
repeat
n:=0;
aaa[j]:=random(100);
for s:=1 to i do
begin
if aaa[j]=aaa[s] then n:=n+1;
end;
until n=0;
end;
end;
end;
end;
i,j:integer;
str:string;
swapa:string[2];
aa:array[1..1200] of string[2];
begin
randomize;
for i:=1 to 1200 do
begin
j:=1+random(1200);
swapa:=aa[i];
aa[i]:=aa[j];
aa[j]:=swapa;
end;
for i:=1 to n do
str:=str+aa[i]+':';
showmessage(str);
end;
我自己已经搞定了,代码如下:
function Tfrmdraw03.CheckIsHave(int: integer): Boolean;
var
k:integer;
begin
for k:=0 to SpinEdit1.Value-1 do
begin
if RanArr[k] =int then
result :=True;
end;
result :=False;
end;
procedure Tfrmdraw03.Timer1Timer(Sender: TObject);
var
sm: string;
ss: string;
i: integer;
begin
inherited;
dlist.Clear;
RanArr :=nil;
SetLength(RanArr, SpinEdit1.Value);
Randomize;
for i:=1 to SpinEdit1.Value do
begin
sIndex:=Random(sCount);
While (sIndex=0) or (CheckIsHave(sIndex)) do
begin
sIndex:=Random(sCount);
end;
RanArr[i-1] :=sIndex;
end;
end;