我想随机生成100个小于45的随机数,并让这100个随机数的和等于2000请问该怎么实现!

解决方案 »

  1.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
       i:integer;
       iSum:integer;
       IntArray : array [1..100] of integer;
    begin
       Randomize;
       iSum:=0;
       while iSum<>2000 do
       begin
          iSum:=0;
          ListBox1.Clear;
          for i:=1 to 100 do
          begin
             IntArray[i]:=Random(45);  //可以用数组接收
             iSum:=iSum+IntArray[i];
             ListBox1.AddItem(IntToStr(IntArray[i]),self); //显示出来给你看
          end;
       end;
    end;
      

  2.   

    我的想法,设她们的求和函数为sum()function p(aDelta: integer: integer;
    {
      repeat
        result := randomrange(1,100);
      until arr[result] + aDelta < 45;  
    }procedure main()
    {
      生成100个随即数,放在arr[1..100] of integer,  delta := sum() - 2000;
      while delta <> 0 do
      {
        d := min(abs(delta), 45 div 2);
        if delta < 0 then d := -d;
        idx := p(d);
        arr[idx] := arr[idx] + d; 
        delta := delta - d; //收敛
      }
    }
      

  3.   

    var
     i,j:integer;
    begin
    Randomize;
    j:=0 ;
    while j<>2000 do
     begin
      for i:=0 to 100 do
      begin
      j:=j+Random(45);
      edit1.Text:=inttostr(j);
      end;
     end;
    edit2.Text:='right';
    end;
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      Res: array [0..99] of Integer;
      I, B: Integer;
    begin
      Randomize;
      ZeroMemory(@Res, SizeOf(Res));
      for I := 1 to 2000 do
      begin
        repeat
          B := Random(Length(Res));
          B := Random(Length(Res));
        until Res[B] < 45;
        Inc(res[B]);
      end;
    end;
      

  5.   

    //另外一个想法
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Res: array [0..99] of Integer;
      I, B, C: Integer;
    begin
      Randomize;
      ZeroMemory(@Res, SizeOf(Res));
      I := 1;
      while I < 2000 do
      begin
        repeat
          B := Random(Length(Res));
          if Res[B] <> 0 then
            B := Random(Length(Res));
        until Res[B] < 45;
        C := Random(45 - Res[B]);
        Inc(res[B], C);
        Inc(I, C);
      end;
    end;
      

  6.   

    难道 hujinger(克沙) 的办法很有效??