如何快速地产生无重复的随机数?(也就是说产生100个随机数,范围在1-100内,不能有重复,就好像洗扑克牌一样) 一般的算法是:生成时的随机数和已经生成的随机数(组)比较,如有重复再寻找下一个随机数;不过这种算法 随着随机数的增加 变的越来越慢(因为需要比较的数越来越多,更糟的是刚刚产生的随机数,已经是重复了)

解决方案 »

  1.   


    procedure TForm1.Button1Click(Sender: TObject);  var  inti,intb,i:integer;
      arrayb:array[1..100]] of integer;
      arraya:array of integer;begin   for inti:=99 downto 0 do
       begin
         Randomize;
         Random(inti)
         setlength(arraya,length(arraya)+1);
         arraya[length(arraya)+1]:=arrayb[inti];
         //从arrayb中去除arrayb[inti]项
         // arrayb中inti中后面的项向前移
       end;
       //arrayb中的内容就是所要#求的随机数
    end;
      

  2.   

    错了是arraya中的数据就是所要求的
      

  3.   

    分都给我吧
    procedure Countnum(var a:array of integer); var
     len:integer;
     i, Index: Integer;
     temp:array of integer;begin len:=length(a);
     setlength(temp,len); for i:=0 to high(temp) do temp[i]:=i+1;
    //如果想要数值从0开始则temp[i];=i;
     while Len>0 do
     begin
       Index:=Random(Len);
       a[high(a)+1-Len]:=temp[Index];
       temp[Index]:=temp[Len-1];
       Len:=len-1;
     end
    end;
      

  4.   

    会重复 那是因为你没有撒播随机数种子也就是说 没有写 Randomize;具体生成随机数是很简单的严重同意楼上的