有一数组如下:
2,8,9,12,13,17,19,22要求随机产生8个数,其中有两个数必须和上组相同,如:
3,7,8,11,12,14,15,20 (8和12相同)就保留这一数组,如果
产生两以上个相同的数就不要这一数组最后要求这8个数必须是1到30的范围,产生300个上面要求的数组大家救命

解决方案 »

  1.   

    var
      I, J: Integer;
      RArray: Array[0..7] of Integer;
    const
      ConstArray: Array[0..7] of Integer =
        (2,8,9,12,13,17,19,22);
    begin
      Randomize;
      for I := 0 to 299 do begin
        for J := 0 to 5 do
          RArray[J] := RandomRange(1, 30);
        for J := 6 to 7 do
          RArray[J] := RandomFrom(ConstArray);
        for J := 0 to 7 do
          Canvas.TextOut(5+J*20, 5+I*20 , IntToStr(RArray[J]));
      end;
    end;—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    type
      TASet=set of 1..30;
    const
     ASet:TASet=[2,8,9,12,13,17,19,22];var
      i,j,k:Integer;
      Sets:Array[1..300] of TASet;
      Exists:Boolean;
    begin
      Randomize;
      for i:=1 to 300 do
      begin
        Exists:=True;
        while Exists do
        begin
          Sets[i]:=[];
          for j:=1 to 6 do
          begin
            repeat
              k:=Random(29)+1;
            until  not (k in Sets[i]) and not (k in ASet);
            Sets[i]:=Sets[i]+[k];
          end;
          for j:=7 to 8 do
          begin
            repeat
              k:=Random(29)+1;
            until not (k in Sets[i]) and (k in ASet);
            Sets[i]:=Sets[i]+[k];
          end;
          Exists:=False;
          for j:=1 to i-1 do
            if Sets[i]=Sets[j] then
            begin
              Exists:=True;
              Break;
            end;
        end; //while  end;end;
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    type
      TASet=set of 1..30;
    const
     ASet:TASet=[2,8,9,12,13,17,19,22];var
      i,j,k:Integer;
      Sets:Array[1..300] of TASet;
      Exists:Boolean;
    begin
      Randomize;
      for i:=1 to 300 do
      begin
        Exists:=True;
        while Exists do
        begin
          Sets[i]:=[];
          for j:=1 to 6 do
          begin
            repeat
              k:=Random(29)+1;
            until  not (k in Sets[i]) and not (k in ASet);
            Sets[i]:=Sets[i]+[k];
          end;
          for j:=7 to 8 do
          begin
            repeat
              k:=Random(29)+1;
            until not (k in Sets[i]) and (k in ASet);
            Sets[i]:=Sets[i]+[k];
          end;
          Exists:=False;
          for j:=1 to i-1 do
            if Sets[i]=Sets[j] then
            begin
              Exists:=True;
              Break;
            end;
        end; //while  end;end;