var temp.i,j,k:integer; num:array[0..99] of integer; begin for i:=1 to 100 do num[i-1]:=i; j:=99; i:=0; while i<=99 do begin randomize; k:=random(j); while (k=j) or (k<0) do begin randomize; k:=random(j); end; temp:=num[k]; num[k]:=num[j]; num[j]:=temp; j:=j-1; i:=i+1; end; end;
那你现在是?????
我想在DELPHI 中写的话也是可以的。
data:array[1..100] of byte;
Data_flag:array[1..100]of Boolean;
为data赋值初始化为待选数据。
为Data_flag赋值初始化为,该位置是否有效。
然后随机在Data中取数,取到后查看Data_flag看Data_flag相对位置是否有效。
有效取走,并把Data_flag该位子写成无效,若无效,则丢弃取下一个。
也可只定义一个数组Data,取走数后把该位置为一不合理的数,比如0,取得0为无效,其他为有效,取到有效的数后把改为置0;
你试试吧。
temp.i,j,k:integer;
num:array[0..99] of integer;
begin
for i:=1 to 100 do
num[i-1]:=i;
j:=99;
i:=0;
while i<=99 do
begin
randomize;
k:=random(j);
while (k=j) or (k<0) do
begin
randomize;
k:=random(j);
end;
temp:=num[k];
num[k]:=num[j];
num[j]:=temp;
j:=j-1;
i:=i+1;
end;
end;