var s1,s2,s3:string; i,j,m,n,k,l:integer; str:array of integer; begin s1:=self.Edit1.Text;//总数 s2:=self.Edit2.Text;//拆分个数 if (s1='') or (s2='') then exit; i:=strtoint(s1); j:=strtoint(s2); setlength(str,j); l:=0; m:=i div j; for n:=1 to j-1 do begin randomize; k:=random(m-1)+1; str[n-1]:=k; l:=l+k; end; str[j-1]:=i-l; s3:=''; for n:=1 to j do s3:=s3+inttostr(str[n-1])+','; self.Edit3.Text:=s3;//拆分的数 end;
首先把50/n 作为基数。
然后 在50的范围内取随即数r1。加到第一个基数,产生第一个数
在50-r1范围内取随机数r2 加到第二个基数,产生第二个数
。产生N个数。(如果随即数用完的话,后面都等于基数本身了)这样 ,这个N个数加一起就等于100了。如果N大于50的话 稍微复杂点。最少有一个数是1
var
s1,s2,s3:string;
i,j,m,n,k,l:integer;
str:array of integer;
begin
s1:=self.Edit1.Text;//总数
s2:=self.Edit2.Text;//拆分个数
if (s1='') or (s2='') then
exit;
i:=strtoint(s1);
j:=strtoint(s2);
setlength(str,j);
l:=0;
m:=i div j;
for n:=1 to j-1 do
begin
randomize;
k:=random(m-1)+1;
str[n-1]:=k;
l:=l+k;
end;
str[j-1]:=i-l;
s3:='';
for n:=1 to j do
s3:=s3+inttostr(str[n-1])+',';
self.Edit3.Text:=s3;//拆分的数
end;