有没有什么好的方法可以随即在0--10产生4个不同的数字

解决方案 »

  1.   

    procedure getRand(range,number:integer);
    var
      i,k: Integer;
      a :array[1..2048] of Integer;
    begin
      //Randomize;
      for i :=1 to range do a[i] :=i; //得到顺序的数组
      for i :=1 to number do begin
        //Randomize; 不能放在这里,否则生成的随机数会有规律地变化
        k := Random(range+1-i)+1 ; //随机范围不断缩小
        myRand[i] := a[k]; //取出随机数据    //for j :=1 to range-number do     //将后面的都向前挪一位。
        //a[j+k-1]:=a[j+k];
        
        a[k] :=a[range+1-i]; //将最后一个前移到被取出的位置,相当于删除 。
        //本来想用这条命令代替上面的循环,但是得到的随机数组呈现规律性。
        {如果在本程序段中使用randomize反而造成了随机数明显的规律性变化,
         取消randomize得到的随机数暂时看不到规律性。
         本段代码,将最后一个数放到被取走的数的位置再生成下一个随机数,
         而不是将每个数往前挪一位。}
      end;
    end;