n1:= random(20);
n2:= rand((100-n1) div 4);
n3:= rand((100-n1-n2) div 3);
n4:= rand((100-n1-n2-n3) div 2);
n5:= 100-n1-n2-n3--n4;

解决方案 »

  1.   

    楼上的方法不能产生n1>20的情况?1)效率低下
    fillchar(n,sizeof(n),0);
    for i:=1 to 100 do
      inc(n[random(5)+1]);2)效率稍高
    {先随机产生5个数}
    total := 100;
    for i:=1 to 4 do
    begin
      n[i] := random(total);
      dec(total,n[i]);
    end;
    n[5] := total;{但这其中,从n[1]到n[5],范围逐渐缩小,会使随机有倾斜
      譬如很难出现n[5] > 90 的情况,因此,有必要将这5个数
    随机打乱次序,保证产生数值的随机性}
    for i:=1 to 5 do
    begin
      j := random(5)+1; k := random(5)+1;
      tmp := n[j]; n[j] := n[k]; n[k] := tmp;
    end;这样应该可以了。
      

  2.   

      gz 先随机产生五个随机数,再把产生的随机数赋给随机label(五个label里面不重复)而不是依次指定label.
      

  3.   

    我这样写怎么出了错
    var
    total:integer;
    n:variant;
    i :integer;
    const
    total=100;
    begin
    n:=vararraycreate([1,5]),varinteger);
    n[1]:=strtoint(e1.text);
    n[2]:=strtoint(e2.text);
    n[3]:=strtoint(e3.text);
    n[4]:=strtoint(e4.text);
    n[5]:=strtoint(e5.text);
    for i=1 to 4 do
    begin
    n[i]=random(total);
    dec(total,n[i]);
    end;
    n[5] := total;
    end;
    其中e1,e2等是 label,调试时出错,提示not enough parameters
    declaration expected but 'for' found
    undeclared identifier:'n'
      

  4.   

    n1:= random(100);
    n2:= rand(100-n1);
    n3:= rand(100-n1-n2);
    n4:= rand(100-n1-n2-n3);
    n5:= 100-n1-n2-n3--n4; 
      

  5.   

    label有text么?只有caption呀,你不会用的是edit吧?
    设有5个label,分别是e1,e2,e3,e4,e5
    把这个放入你的buttonclick程序中,试试看(dephi5下自己调试通过):var
      n:array [1..5] of integer;
      i, j, k, temp, total:integer;
    begin
      total := 100;
      for i:=1 to 4 do
      begin
        n[i] := random(total);
        dec(total,n[i]);
      end; 
      n[5] := total;
      
      for i:=1 to 5 do
      begin
        j := random(5)+1;  k:=random(5)+1;
        temp := n[j]; n[j] := n[k]; n[k] := temp;
      end;  e1.Caption := inttostr(n[1]);
      e2.Caption := inttostr(n[2]);
      e3.Caption := inttostr(n[3]);
      e4.Caption := inttostr(n[4]);
      e5.Caption := inttostr(n[5]);
    end;
      

  6.   

    to dai1016(小次郎) :
    必然会有一个数在20 以内的。
    顶多把顺序改变以下。
      

  7.   

    简单的问题
    可以有0吗? 如果有的话更好办。
    i[1]:=Random(100);
    i[2]:=Random(100-i[1]);
    i[3]:=Random(100-i[1]-i[2]);
    ......
    这样做有任何问题吗?
      

  8.   

    补充i[5]:=100-i[1]-i[2]-i[3]-i[4]
    顺便一说,这好像和楼上 V_Lucky(Lucky) 的一样啊。哈哈
      

  9.   

    大家请看:
    ************************************************************
    回复人: windindance(风之舞) (2001-12-20 10:26:49)  得0分 
    to dai1016(小次郎) :
    必然会有一个数在20 以内的。
    顶多把顺序改变以下。  
    ************************************************************5个数字的和为100, 当然有一个在20以内啦。 有什么问题?????
    如果5个都在20以上,21*5=105                            哈哈