/*********************************************************************************
65. ( NOI'94.1_1 ) 键盘输入一个仅由小写字母组成的字符串,输出以该串中任
取M个字母的所有排列及排列总数。
*******************************************************************************/
#include <stdio.h>
#include <string.h>
#include <malloc.h>
char str[100];
int m;
int counter = 0;
//生成排列
void combine(int *a,int n,int r)
{
if(r == 0)
{
int i;
for(i=0; i<m; i++)
printf("%c ",str[a[i]]);
printf("/n");
counter ++;
}
else if(n >= r)
{
a[r-1] = n-1;
combine(a,n-1,r-1);
combine(a,n-1,r);
}
}
void main()
{
int n;
int *a;
printf("请输入一个字符串:/n");
if(!gets(str))
{
printf("Input fail!/n");
return;
}
printf("m=");
scanf("%d",&m);
n = strlen(str);
if(n<m)
{
printf("m不符合!/n");
return;
}
a = (int*)malloc(m*sizeof(int));
combine(a,n,m);
printf("一共有%d种排法!/n",counter);
free(a);
}