在1到m的整数中取出n个不重复的随机数字?(n<m). 我觉得
jiangjian0427驴子先生教过我:‘用数组啊
第二次是在剩下的数据中用随机函数’  的方法可以,但是我实在是不会写了!
请高手指教(那个帖子我接帖给分了,所以又开了一帖,不好意思…)

解决方案 »

  1.   

    const
      N:integer=100;
      M:integer=1000;
    var
      a:array[0..M-1] of integer;
      b:array[0..N-1] of byte;
      i,j,temp:integer;
    begin
      for i := 0 to M-1 do
        a[i]:=i;
      for i := 0 to n-1  do
      begin
        temp:=Random(m-i-1);
        b[i]:=a[temp];
        for j := temp to M-2 do
          a[j]:=a[j+1];
      end;
    end;
      

  2.   

    运行的时候在a:array[0..M-1] of integer;
                b:array[0..N-1] of byte;
           报错:Constant expression expected
    请高手进一步指教!
      

  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;book下来的,应该满足你的要求
    给分了!
      

  4.   

    random能产生随机数吗?我记得它产生的数据是很有规律的,哦,不对,不是很有规律,而是根本就是一样的
      

  5.   

    我的意思是他可能产生1,8,7,3....(执行random几次)
    再执行一次程序你会看到1,8,7,3..
      

  6.   

    fengxue291080(风雪) 先生  您的while Len>0 do 没有执行呀?length(a);high(a)?? 能解释一下吗? 只要实现了,立即给分呀!!
      

  7.   

    哦,M-1用1000-1代替。N-1,用100-1。为什么?是常数定义没有生效吗?
    还有random之前Randomize一下重新生成种子。就不会一样了
      

  8.   

    我以前也碰到过这类问题,不过我没用数组,我是用S:TStrings(字符串队列)来实现的,先把随机范围内的数初始化到TStrings里,然后用random(S.count)随机一个索引,根据这个索引找到一个数,取出后根据索引删掉相应的数,再以上步骤。
      

  9.   

    使用random前要先 Randomize下
           Randomize;
      for i := 0 to M-1 do
        a[i]:=i;
      for i := 0 to n-1  do
      begin
        temp:=Random(m-i-1);
        b[i]:=a[temp];
        for j := temp to M-2 do
          a[j]:=a[j+1];
      end;
      

  10.   

    大家看我这段代码吧
    qx.Close;
    qx.SQL.Clear;
    qx.SQL.Add('select * from 选择题');
    qx.Open;
    qx.First;
    i:=1;
         while i<=x1 do
       begin
     randomize;
           qx.first;
           
                i=i+1
        end
    我这样取的记录总是有重复的,所以我希望能取到不重复的随机数呀。这样我在出来5条记录的时候才不会重复。因为这是个出题的程序。
     我如何才能实现呢?
        我想在while语句下设一个语句,把已经出的题标识一下,可以如何获得要标识qx.MoveBy(Random(qx.recordcount));这条记录呢?
     哎呀呀!!愁傻我了!
    呵呵::)))
      

  11.   

    qx.Close;
    qx.SQL.Clear;
    qx.SQL.Add('select * from 选择题');
    qx.Open;
    qx.First;
    i:=1;
         while i<=x1 do
       begin
     randomize;
           qx.first;
           qx.MoveBy(Random(qx.recordcount));
                i=i+1
        end
    调了一句
    呵呵
    不好意思呀:)