老师有一项作业内容如下
  求10-100的随机数,比如min为10,max100.第一次随机出来是13,然后在随机的时候就是从10,11,12,14,15..100第2次随机出来是15 然后就是从10.11.12.14.16.17....100以此类推 显示一共循环多少次 如入说 我点了按钮10次 出现100 多少次,99多少次,98多少次.. 还有就是 我随机完了按要求 比如随机的数字是 10 15 20 我填进去了 下次随机的时候就自动抛出在外 没有他们3了 ...谢谢各位大侠帮忙了 最好给出完整的代码

解决方案 »

  1.   

    你说的,我看不大明白;给你个例子
    产生不重复随机数的算法能够解决诸如随机洗牌,抽彩等问题,在网上的一些算法自觉较繁,现给出简单的算法。以下源程序为1..36个数字,随机排列,产生不重复随机数。 
    varaa : array[1..36] of string[2]; //aa数组为需要随机排列的数组,{先把1..36按顺序给aa数组赋值}procedure TForm1.FormCreate(Sender: TObject);
    var
    i:integer;
    begin
    for i:=1 to 36 do 
      aa[i]:=inttostr(i);
    end;{随机进行排列}procedure TForm1.Button1Click(Sender: TObject);
    var
      i,j:integer;
      swapa:string[2];
    begin
     randomize;
     for i:=1 to 36 do 
     begin
      j:=i+random(36);
      swapa:=aa[i];
      aa[i]:=aa[j];
      aa[j]:=swapa;
     end; //由此得到不重复的随机排列数字
    end;
      

  2.   

    delphi 随机数的问题(特简单)  
    是特简单,可为什么特简单你不会呢。自己写写吧,没用到几个东西.
      

  3.   

    这样的问题最好还是写一个类来处理吧。如下首先建一个单元,新建类TGenRandomunit GenRandom;interfaceuses
      SysUtils, Classes;type
      TGenRandom = class
      private
        FNumbers: TList;
        function GetNumber(Index: Integer): Integer;
        procedure SetNumber(Index: Integer; const Value: Integer);
        function GetCount: Integer;
      public
        constructor Create;
        destructor Destroy; override;
        procedure AddNumber(Number: Integer);
        procedure RemoveAll;    function RemoveAt(Index: Integer): Integer;
        function Next(): Integer; //在Numbers里随机选一个数
        property Number[Index: Integer]: Integer read GetNumber write SetNumber;
        property Count: Integer read GetCount;
      end;implementation{ TGenRandom }constructor TGenRandom.Create;
    begin
      Randomize;
      FNumbers := TList.Create;
    end;destructor TGenRandom.Destroy;
    begin
      RemoveAll;
      FNumbers.Free;
      inherited;
    end;procedure TGenRandom.AddNumber(Number: Integer);
    //加一个参与随机挑选的数
    var
      PNum: PInteger;
    begin
      New(PNum);
      PNum^ := Number;
      FNumbers.Add(PNum);
    end;procedure TGenRandom.RemoveAll;
    var
      i: Integer;
    begin
      for i := FNumbers.Count - 1 downto 0 do
        RemoveAt(i);
    end;function TGenRandom.RemoveAt(Index: Integer): Integer;
    //移去第Index项,并返回第Index项的数字
    var
      P: PInteger;
    begin
      P := FNumbers.Items[Index];
      Result := P^;
      Dispose(P);
      FNumbers.Delete(Index);
    end;function TGenRandom.GetNumber(Index: Integer): Integer;
    begin
      Result := PInteger(FNumbers.Items[Index])^;
    end;procedure TGenRandom.SetNumber(Index: Integer; const Value: Integer);
    begin
      PInteger(FNumbers.Items[Index])^ := Value;
    end;function TGenRandom.GetCount: Integer;
    begin
      Result := FNumbers.Count;
    end;function TGenRandom.Next: Integer;
    //随机选一个数,并把它移出,防止下次选择时重复出现
    //选择的范围为FNumbers里所有的数
    begin
      Result := RemoveAt(Random(Count));
    end;end.
    调用代码uses GenRandom;procedure TForm1.Button1Click(Sender: TObject);
    var
      GenRandom: TGenRandom;
      i: Integer;
      S: string;
    begin
      GenRandom := TGenRandom.Create;
      try
        for i := 10 to 100 do
          GenRandom.AddNumber(i);    S := '';
        while GenRandom.Count > 0 do
        begin
          if S = '' then
            S := IntToStr(GenRandom.Next())
          else
            S := S + ', ' + IntToStr(GenRandom.Next());
        end;
        ShowMessage(S);
      finally
        GenRandom.Free;
      end;
    end;
      

  4.   

    看来你真是一个新手,我把操作的每一步方法告诉你:
    打开Delphi,建一个按扭,双击它,写入下面代码:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      GenRandom: TGenRandom;
      i: Integer;
      S: string;
    begin
      GenRandom := TGenRandom.Create;
      try
        for i := 10 to 100 do
          GenRandom.AddNumber(i);    S := '';
        while GenRandom.Count > 0 do
        begin
          if S = '' then
            S := IntToStr(GenRandom.Next())
          else
            S := S + ', ' + IntToStr(GenRandom.Next());
        end;
        ShowMessage(S);
      finally
        GenRandom.Free;
      end;
    end;
    然后,在USES里面添加一个GenRandom,接着,点全部保存。保存到C:\ABC目录中。最后,把下面的代码复制到记事本,保存是输入保存名为C:\ABC\GenRandom.PAS(必须这样写),然后把用Delphi编译你的程序吧,得到的数就是从10到100间不重复的随机数:unit GenRandom;interfaceuses
      SysUtils, Classes;type
      TGenRandom = class
      private
        FNumbers: TList;
        function GetNumber(Index: Integer): Integer;
        procedure SetNumber(Index: Integer; const Value: Integer);
        function GetCount: Integer;
      public
        constructor Create;
        destructor Destroy; override;
        procedure AddNumber(Number: Integer);
        procedure RemoveAll;    function RemoveAt(Index: Integer): Integer;
        function Next(): Integer; //在Numbers里随机选一个数
        property Number[Index: Integer]: Integer read GetNumber write SetNumber;
        property Count: Integer read GetCount;
      end;implementation{ TGenRandom }constructor TGenRandom.Create;
    begin
      Randomize;
      FNumbers := TList.Create;
    end;destructor TGenRandom.Destroy;
    begin
      RemoveAll;
      FNumbers.Free;
      inherited;
    end;procedure TGenRandom.AddNumber(Number: Integer);
    //加一个参与随机挑选的数
    var
      PNum: PInteger;
    begin
      New(PNum);
      PNum^ := Number;
      FNumbers.Add(PNum);
    end;procedure TGenRandom.RemoveAll;
    var
      i: Integer;
    begin
      for i := FNumbers.Count - 1 downto 0 do
        RemoveAt(i);
    end;function TGenRandom.RemoveAt(Index: Integer): Integer;
    //移去第Index项,并返回第Index项的数字
    var
      P: PInteger;
    begin
      P := FNumbers.Items[Index];
      Result := P^;
      Dispose(P);
      FNumbers.Delete(Index);
    end;function TGenRandom.GetNumber(Index: Integer): Integer;
    begin
      Result := PInteger(FNumbers.Items[Index])^;
    end;procedure TGenRandom.SetNumber(Index: Integer; const Value: Integer);
    begin
      PInteger(FNumbers.Items[Index])^ := Value;
    end;function TGenRandom.GetCount: Integer;
    begin
      Result := FNumbers.Count;
    end;function TGenRandom.Next: Integer;
    //随机选一个数,并把它移出,防止下次选择时重复出现
    //选择的范围为FNumbers里所有的数
    begin
      Result := RemoveAt(Random(Count));
    end;end.
      

  5.   

    如果你想简单一点,不用他的方法,我可以帮你写出代码最简单的方法。你打开Delphi,建一个按扭,双击按扭,写入以下代码即可实现你的需要:procedure TForm1.Button1Click(Sender: TObject);
    var
     i:integer;
     tmp:string;
     s:TStringList;
    begin
     Randomize;
     s:=TStringList.Create;
     while (s.Count<90) do
      begin
       tmp:=inttostr(11+Random(90));
       if s.IndexOf(tmp)=-1 then  s.Add(tmp);
      end;
      showmessage(s.CommaText);
      s.Free;
    end;
      

  6.   


    修正一点:tmp:=inttostr(11+Random(90)); //这个是取11到100之间的数。改为:tmp:=inttostr(10+Random(91)); //这个才合你的要求。
      

  7.   

    主要使用randam,randomize初始化,这个还要给出代码啊?
      

  8.   

    感觉用一楼的算法打乱数组就可以,比较简单。
    不过 j:=i+random(36); 会越界吧?
    应该改成
    j:=(i+random(36)) mod 36 + 1;