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

Tác giả: ladpro98

Ngôn ngữ: Pascal

program qbhv;
uses    math;
const   fi='';
var     ch:array['A'..'Z'] of longint;
        gt:array[1..10] of longint;
        res:array[1..10] of char;
        s:string[11];
        inp:text;
        len,counter:longint;

procedure input;
begin
        assign(inp,fi);
        reset(inp);
        readln(inp,s);
        len:=length(s);
        close(inp);
end;

procedure init;
var     i:longint;
begin
        for i:=1 to len do
        begin
                inc(ch[s[i]]);
        end;
        gt[1]:=1;
        for i:=2 to 9 do
        gt[i]:=gt[i-1]*i;
end;

procedure calc;
var     c:char;
begin
        counter:=gt[len];
        for c:='A' to 'Z' do
        if ch[c]>0 then
        counter:=counter div gt[ch[c]];
end;


procedure print;
var     i:longint;
begin
        for i:=1 to len do
        write(res[i]);
        writeln;
end;


procedure duyet(i:longint);
var     c:char;
begin
        if i>len then
        begin
                print;
                exit;
        end;
        for c:='A' to 'Z' do
        if ch[c]>0 then
        begin
                dec(ch[c]);
                res[i]:=c;
                duyet(i+1);
                inc(ch[c]);
        end;
end;

begin
        input;
        init;
        calc;
        writeln(counter);
        duyet(1);
end.

Download