有一个总数是100
如何让他拆成N个
结果这N个加起来等于100
例如拆成 5,16,30,27,22,他们加起来又刚好等100
如何让他拆成N个
结果这N个加起来等于100
例如拆成 5,16,30,27,22,他们加起来又刚好等100
解决方案 »
- delphi 如何做一个像飞鸽一样的开始界面。就是打开飞鸽,能够查找到局域网里已经打开飞鸽的机器
- 问一条SQL语句,和DBGRID显示问题
- 用Database控件,密码该在哪里加入?
- 如何实现类似模拟器上按钮按下的效果呀?
- 请高手指点SQL问题!
- 【用过WaitForSingleObject的来看看】
- 谁有FastReport中文版控件?
- 提示“SELECT 子句中包含一个保留字、拼写错误或丢失的参数,或标点符号不正确。”
- opendialog中多选文件后files中的文件名次序和实际选择的次序不一致,怎么解决?
- 新手提问,关于DELPHI的数据类型及运算问题
- 最近升级IE浏览器怎么都升级不了,不怎么什么原因????
- 那位做过CDT通讯规约?
首先把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;