Q&A

  • 문자열 중복 생성 문제...
A 부터 Z 까지의 배열이 있다고 하면

각각 경우의 수의 값을 구하고 싶습니다.

예를 들면 주어진 값이 3이라면

AAA
AAB
AAC
.
.
BAA
BAB
BAC
.
.
ZZY
ZZZ
와 같은 식의 리스트를 구하고자 합니다.
어떤방식으로 해야할까요?

아무리 생각해도 방법이 생각나지 않네요...

어떤분은 재귀호출 방식으로 하라고 하는데...

잘 생각이 나질 않네요.

자세한 예를 들어 설명해주실분 답변 부탁드립니다. ^^
1  COMMENTS
  • Profile
    홍성락 2003.07.31 02:55

    hsr//////////////////////////////////////////////
    아래는 재귀호출과 ord,chr를 사용했습니다.
    다른방법도 있을건데요...
    procedure TForm1.permutation(OrgStr : string; pos : integer);
    begin
        if (pos < 1)or(pos > Length(OrgStr)) then exit;
        if (Ord(OrgStr[pos]) <= 90) then begin
           ListBox1.Items.Add(OrgStr);

           if (pos < Length(OrgStr)) then begin
              OrgStr[pos+1]   := 'B';
              permutation(OrgStr,pos+1);
           end
           else begin
              OrgStr[pos] := Chr(Ord(OrgStr[pos])+1);
              permutation(OrgStr,pos);
           end;
        end
        else begin
           OrgStr[pos-1] := Chr(Ord(OrgStr[pos-1])+1);
           OrgStr[pos]   := 'A';
           permutation(OrgStr,pos-1);
        end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var
        str : string;
    begin
        ListBox1.Clear;
        str := 'AAA';
        permutation(str, Length(str));
    end;