有没有这样的一个随机函数,可以从0-100产生一个随机数,例如第一次产生的是58,第二次再产生随机数时不包括第一次产生的随机数,也就是58这个数,而是其它的数,如69,第三次再产生随机数时不包括前两次的随机数,这样一直到所有剩下的数都随机产生完。

解决方案 »

  1.   

    先用random(100),再产生,再如相等则再random....如果次数多可以用数组来完成
      

  2.   

    用这种方法可达到你的目的,确效率最高。
    for i:=0 to 100 do
      A[i]=i;Randomize;
    for i:=0 to 100 do
    begin
      j:=Random(101);
      k:=A[i];
      A[i]:=A[j];
      A[j]:=k;
    end;
      

  3.   

    ===============================[Code Start]===============================
    procedure GenerateRandoms(var arr:array of integer);
    var ordTable:array of integer;
    i,j,temp:integer;MaxNumber:integer;
    begin
      Randomize;
     //建立顺序表
      SetLength(ordTable,High(arr)-Low(arr)+1);
      MaxNumber:=100*Length(ordTable);
     //随机初始化顺序表
      for i:=Low(arr) to High(arr) do
        ordTable[i]:=Random(MaxNumber);
      //顺序表与目标数组排序,排序后就是随机数组了
      for i:=0 to Length(ordTable) do
      begin
        for j:=Low(arr) to High(arr)-1 do
          if ordTable[j]>ordTable[j+1] then
          begin
            temp:=ordTable[j+1];
            ordTable[j+1]:=ordTable[j];
            ordTable[j]:=temp;
            temp:=arr[j+1];
            arr[j+1]:=arr[j];
            arr[j]:=temp;
          end;
      end;
    end;
    ===============================[Code End]===============================
    GenerateRandoms函数举例:var arr:array[0..100] of integer;i:integer;
    begin
      for i:=0 to 100 do
        arr[i]:=i;
      Memo1.Clear ;
      GenerateRandoms(arr);
      for i:=0 to 100 do
        Memo1.Lines.Add(IntToStr(arr[i]));
      

  4.   

    这个方法好用
    var 
      list1,list2:Tstringlist;
    i,t:integer;
    begin
    list1:=Tstringlist.create;
    list2:=tstringlist.create;
    for i:=1 to 100 do
      list1.add(inttostr(i));
    for i:=1 to n(随即个数)do
    begin
      randomize;
      t:=raddom(list1.count-1);
      llist2.add(list1.string[t])
      list1.delete[t];
    end;
      

  5.   

    再贴一次
    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;
      

  6.   

    Eastunfail(龙子龙孙)==(恶鱼杀手)的做法是我理想的,因为每次关闭程序,再开启程序产生随机数时,也上次产生的是不同的,而其它的程序每次开启程序产生随机数与上次是一样的。
      

  7.   

    其他产生一样的是因为没有家
    Randomize;
    加了这个之后就不会一样了
      

  8.   

    hiflower(花) 的方法效率的确是高,比我的方法还要简单。