www.pudn.com > gc.rar > GC_8_11.C


# include  
# include  
# define N 20 
char w[N]; 
void perm(int n,char *s) 
{ 
	char s1[N]; 
	int i; 
	if(n < 1) printf("%s\n",w);            /*一个排列生成输出*/ 
	else {                                 /*设定本层次字符,并递归调用生成更深层次字符*/ 
		strcpy(s1,s);                      /*保存本层次可用的字符*/ 
		for(i = 0; *(s1 + i); i++)  {      /*依次选本层次可用字符*/ 
			*(w+n-1) = *(s1+i);             /*选用字符填入正生成的字符排列中*/ 
			*(s1+i) = *s1; 
			*s1 = *(w+n-1); 
			perm(n-1,s1+1);              /*递归*/ 
		} 
	} 
} 
 
void main() 
{ 
	char s[20]; 
	int n; 
	printf("输入要排列的字符串\n"); 
	scanf("%s",&s); 
	printf("你想生成有几个字符组成的字符排列\n"); 
	scanf("%d",&n); 
	perm(n,s); 
	//perm(3,"abcdefghi"); 
}