var
  Form1: TForm1;
  arr1: array[1..40] of integer=(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4);
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
  i,l:integer;
  j:double;
  dim:integer;
begin
  j:=0;
  randomize;
  for i:=40 downto 1 do
  begin
    dim:=random(i);
    j:=j+power(10,i)*arr1[dim];
   //拿出一个值,将后面的数字前移;
    for l:=dim to i do
      arr1[l]:=arr1[l+1];
  end;
end;

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    const
      cNumberList =
    '11111111' +
    '222222222' +
    '33333333333' +
    '444444444444';
    var
      S: string;
      T: Char;
      I, J, L: Integer;
    begin
      Randomize;
      S := cNumberList;
      L := Length(S);
      for I := 1 to L do begin
        J := Random(L) + 1;
        T := S[I];
        S[I] := S[J];
        S[J] := T;
      end;
      Caption := S;
    end;
      

  2.   

    我来一个另类的:procedure TForm1.Button1Click(Sender: TObject);
    var
    i,l:integer;
    jstr:string;
    begin
    for i:=1 to 8 do
    listbox1.Items.Add('1');
    for i:=1 to 9 do
    listbox1.Items.Add('2');
    for i:=1 to 11 do
    listbox1.Items.Add('3');
    for i:=1 to 12 do
    listbox1.Items.Add('4');
    jstr:='';
    while listbox1.Items.Count>0  do
    begin
    l:=random(listbox1.Items.Count );
    jstr:=jstr+listbox1.Items.Strings[l];
    listbox1.Items.Delete(l);
    end;
    edit1.Text :=jstr;
    end;