我因为一个程序需要,要求生成200个左右的随机不重复4位数?下面是我的算法,可是它会产生重得,请大家帮帮想一下算法,要求不能产生重复数。
procedure TForm1.Button2Click(Sender: TObject);
var
    s:string;
    i:integer;
begin
   memo1.Clear;
   Randomize;
   for i:=0 to 100 do
   begin
   s:=IntToStr(Random(9999));
   case length(s) of
   1:s:='000'+s;
   2:s:='00'+s;
   3:s:='0'+s;
   end;   memo1.Lines.Add(s);
   end;
end;谢谢大家!

解决方案 »

  1.   

    用数组保留,有重复的就找下一个http://lysoft.7u7.net
      

  2.   

    j:=0;for i:=0 to 500 do
       begin
       s:=IntToStr(Random(9999));
       case length(s) of
       1:s:='000'+s;
       2:s:='00'+s;
       3:s:='0'+s;
      for k:=0 to j do 
       begin
       if a[k]=s then
        break
       else
        begin
         a[j]:=s
         j:=j+1;
        end;
      end;if j=200 then
    break;
    end;
      

  3.   

    var
      Num: array[0..9999] of Cardinal;
      I, J, K: Integer;for I := 0 to 9999 do
    begin
      Num[I] := I;
    end;
    Randomize;
    J := 10000;
    for I := 0 to 200 do
    begin
      K := Random(J);
      Memo.Lines.Add(Format('%0.4d', [Num[K]]));
      Num[J - 1] := Num[K] + Num[J - 1];
      Num[K] := Num[J - 1] - Num[K];
      Num[J - 1] := Num[J - 1] - Num[K];
      Dec(J);
    end;