比如有3个字符x y z,要生成如下结果:
xxxx
xxxy
xxxzxxyx
xxyy
xxyz……
我用循环做的,可惜没有结果啊var
  ch:array[1..3] of Char;
  str:string[4];
  i,j:Integer;
  str0:string;
begin
ch := 'x01';  for i:=1 to 4 do
    for j:=1 to 3 do
       str[i]:=Ch[j]; //应该是这里的问题,自己是新手,不知道怎么改啊  str0:=str + str0  ;
  ShowMessage(str0);

解决方案 »

  1.   

    就是按一定顺序排列的,感觉有点像进制啊x之后y再后来z
      

  2.   

    用循环的方法可以这样:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      s:string;
      i,j,k,l:integer;
      const
       c:array[1..3] of char='xyz';
    begin
      Memo1.Clear;
      for i:=1 to 3 do
        for j:=1 to 3  do
          for k:=1 to 3  do
            for l:=1 to 3  do
            begin
              s:=c[i]+c[j]+c[k]+c[l];
              Memo1.Lines.Add(s);
            end;
    end;
      

  3.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
      str,Temp : string;
      I ,II,III : Integer;
    begin
      str := 'xyz';
      for I := 1 to Length(str) do
      begin
        Temp := Str[I];
        for II := 1 to Length(str) do
        begin
          Temp := Temp+ Str[II];
          for III := 1 to Length(str) do
          begin
            case III of
              1 : begin
                Temp := Temp + Str[III];
                Memo1.Lines.Add(Temp);
              end;
              2 : begin
                Temp := Temp + Str[III];
                Memo1.Lines.Add(Temp);
              end;
              3 : begin
                Temp := Temp + Str[III];
                Memo1.Lines.Add(Temp);
              end;
            end;
            Temp := Str[I]+Str[II];
          end;
          Temp := Str[I];
        end;
      end;
    end;
      

  4.   

    实质上是个三进制问题, 给你个更通用的例子, 生成的序号位数可调:procedure TForm1.FormCreate(Sender: TObject);
    const
      N = 5;        //生成的序号的位数
      Chars: array[0..2] of Char = ('x', 'y', 'z');
    var
      i, j: Integer;
      s: String;
    begin
      j := 1;
      for i := 1 to N do j := j * 3;
      for i := 0 to j - 1 do
      begin
        s := '';
        j := i;
        while j > 0 do
        begin
          s := Chars[j mod 3] + s;
          j := j div 3;
        end;
        for j := 1 to N - Length(s) do s := Chars[0] + s;
        Memo1.Lines.Add(s);
      end;
    end;