Powered By Blogger

Tìm kiếm Blog này

Thứ Tư, 8 tháng 9, 2010

Solution 2783. Hoán vị chữ cái (vn.spoj.pl)

Link:
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// for(c='A';c<='Z';c++) printf("d[%c]=%d%s\n",c,d[c]," ");

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