有没有人会写逻辑简单点的,好理解的,谢谢
感觉全排列好难。。。
1个数字全排列 1 种
2个数字全排列,分别把 1 2 排前面,剩下的1个数字跟后面
3个数字全排列,分别把 1 2 3 排前面,每次剩下2个数字,对它全排列。
n个数字全排列,分别把1 2 3 ... n 放在前面,然后每个后面对 n - 1 全排列。
因此就可以递归了
#include<stdio.h>
#include<string.h>
void swap(char *a,char *b)
{
char temp;
temp = *a;
*a = *b;
*b = temp;
}
void Allarrange(char *str,int k,int len)
{
int i;
if(k==len)
{
static int s_i=1;
printf("第%d种排列为:\t%s\n",s_i++,str);
}
else
{
for(i=k;i<=len;i++)
{
swap(str+i,str+k);
Allarrange(str,k+1,len);
swap(str+i,str+k);
}
}
}
int main()
{
char str[10];
printf("请输入排列的字符串:");
gets(str);
Allarrange(str,0,strlen(str)-1);
return 0;
}