有一个总数是100
如何让他拆成N个
结果这N个加起来等于100
例如拆成 5,16,30,27,22,他们加起来又刚好等100

解决方案 »

  1.   

    http://bbs.byr.edu.cn/article/CPP/38947?p=3
      

  2.   

    我有办法。前提是假设N不能大于50
    首先把50/n 作为基数。
    然后 在50的范围内取随即数r1。加到第一个基数,产生第一个数
         在50-r1范围内取随机数r2 加到第二个基数,产生第二个数
         。产生N个数。(如果随即数用完的话,后面都等于基数本身了)这样 ,这个N个数加一起就等于100了。如果N大于50的话 稍微复杂点。最少有一个数是1
      

  3.   


    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;