我求1到30随即数 显示在MEMO中 但不能重复 选出5个直接显示出来.

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var i,j:Integer;
    begin
         i:= 0;
         while true do
         begin
            if i > 3 then Break;
             j := RandomRange(1,30);
           if Memo1.Lines.IndexOf(IntToStr(j)) = -1 then
             begin
               Memo1.Lines.Add(IntToStr(j));
               Inc(i);
             end;
         end;
    end;
      

  2.   

    我记得随机数要初始化一下
    procedure   TForm1.Button1Click(Sender:   TObject); 
    var   
      i,j:Integer; 
    begin 
      memo1.clear;//行数多了会死掉
      i:=   0; 
      while true do 
        begin 
        if i > 3 then Break; 
        randomize;
        j := Random(30)+1;   //0<=j<31 
        if Memo1.Lines.IndexOf(IntToStr(j)) = -1 then 
        begin 
          Memo1.Lines.Add(IntToStr(j)); 
          Inc(i); 
        end; 
      end; 
    end;
      

  3.   

    '求1到30随即数   显示在MEMO中   但不能重复   选出5个直接显示出来'
    楼主的意思是不是说产生一个1~30的随机数表并显示在Memo中,再从Memo中选取连续的5个不重复的随机数?
      

  4.   

    建一个数组A,里面放1..30,数组下标为1..30。令n:=30,得出[1..n]的一个随机数i,以i为下标取出A[i]即为要得到的随机数之一,然后将A[i]和A[n]交换,把取过的数放到数组的最后面,将n-1,如此循环5次就可以了
      

  5.   

    谢谢各位的大力捧场啊我的意思就是从MEMO直接显示出来5个
      

  6.   

    Randomize;
    初始化随机数产生器
      

  7.   

    我觉得还是6楼的方法好,跟发牌的算法差不多,比较有通用性。
    1楼的方法巧是巧,但如果不是放在List里面就不能用。