QBHV - Hoán vị chữ cái

Tác giả: ll931110

Ngôn ngữ: Pascal

Program QBHV;
        Const
                input  = '';
                output = '';
        Var
                s: string;
                n: integer;
                x: array[1..9] of char;
                d: array['A'..'Z'] of integer;
              fac: array[0..9] of longint;
            fi,fo: text;

Procedure openfile;
          Begin
                Assign(fi, input);
                        Reset(fi);

                Assign(fo, output);
                        Rewrite(fo);
          End;

Procedure init;
          Var
                i: integer;
          Begin
                Readln(fi, s);
                n:= length(s);

                Fillchar(d, sizeof(d), 0);
                For i:= 1 to n do inc(d[s[i]]);
          End;

Procedure factorial;
          Var
                i: integer;
          Begin
                fac[0]:= 1;
                For i:= 1 to 9 do fac[i]:= fac[i - 1] * i;
          End;

Procedure number;
          Var
                res: longint;
                 ch: char;
          Begin
                res:= fac[n];
                For ch:= 'A' to 'Z' do res:= res div fac[d[ch]];
                Writeln(fo, res);
          End;

Procedure printresult;
          Var
                i: integer;
          Begin
                For i:= 1 to n do write(fo, x[i]);
                Writeln(fo);
          End;

Procedure attempt(i: integer);
          Var
                ch: char;
          Begin
                For ch:= 'A' to 'Z' do
                        if d[ch] > 0 then
                                Begin
                                        x[i]:= ch;

                                        If i = n then printresult else
                                                Begin
                                                        dec(d[ch]);
                                                        Attempt(i + 1);
                                                        inc(d[ch]);
                                                End;
                                End;
          End;

Procedure closefile;
          Begin
                Close(fi);
                Close(fo);
          End;

Begin
        openfile;
        init;
        factorial;
        number;
        attempt(1);
        closefile;
End.

Download