2783. Hoán vị chữ cái
Mã bài: QBHV
Cho một xâu S chỉ gồm các chữ cái in hoa, 1 <= độ dài <= 9.
Yêu cầu:
1: Có bao nhiêu cách hoán vị các chữ cái của xâu S
2: Liệt kê các hoán vị đó theo thứ tự từ điển
Input
Gồm 1 dòng duy nhất chứa xâu S
Output
Dòng 1: Ghi số lượng hoán vị tìm được (K)
K dòng tiếp theo, mỗi dòng ghi một xâu hoán vị của xâu S theo đúng thứ tự từ điển
Example
Input:
ABAB
Output:
6
AABB
ABAB
ABBA
BAAB
BABA
BBAA
Code:
#include
// #include
#include
char s[10];
char kq[363000][10];
char t[10];
int d[200];
int n;
long int gt[11]={1,1,2,6,24,120,720,5040,40320,362880};
long int kqua;
long int num=0;
void Try(int i);
int main()
{
scanf("%s",&s);
int i;
char c;
for(i=1;i<200;i++) d[i]=0;
n=strlen(s);
for(i=0;i
kqua=gt[n];
for(c='A';c<='Z';c++)
kqua=kqua/gt[d[c]];
printf("%ld\n",kqua);
Try(0);
i=1;
while(i<=kqua)
{
printf("%s\n",kq[i]);
i++;
}
// getch();
return 0;
}
void Try(int i)
{
char j;
if(i==n)
{
t[n]='\0';
num++;
strcpy(kq[num],t);
}
else
{
for(j='A';j<='Z';j++)
if(d[j]>0)
{
d[j]--;
t[i]=j;
Try(i+1);
d[j]++;
}
}
}
Không có nhận xét nào:
Đăng nhận xét