我想随机生成100个小于45的随机数,并让这100个随机数的和等于2000请问该怎么实现!
解决方案 »
- 如何获得fkLookup类型的字段sum值?
- delphi 7.0 导出数据到 excel
- 第十九期:CSDN论坛秀-Delphi版-本期作秀:hthunter(核桃)
- 没有人知道怎么做吗?救命啊----------------------------------!!!!!!!!!!!!!!
- 不好意思,小弟是刚学的菜鸟,现在对UPDATESQL这个控件不是太会用,有哪位大侠可以帮忙,为感~!
- 想搜索目录中的EXE文件,出错,帮改,另有好的方法请贴出来.
- 用D6写的程序在退出时出现非法操作,请高手解决。
- 谁开发过例如斗地主之类的网络程序
- 各位Delphi前辈,请教如何实现对IE编程,使其能实现直接打开并运行联接的本机的.exe文件,而不是显示下载的对话框?
- paradox数据库如何保存影像和声音数据
- 请教高手 透明 panel 的实现
- Ado保存blob大字段问题!!?急!!!
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;
{
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; //收敛
}
}
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;
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;
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;