时限:100ms 内存限制:10000K 总时限:300ms
描述:
输入一个小于10的正整数n,按把每个元素都交换到最前面一次的方法,输出前n个小写字母的所有排列。
输入:
输入一个小于10的正整数n。
输出:
按把每个元素都交换到最前面一次的方法,输出前n个小写字母的所有排列。
输入样例:
3
输出样例:
abc
acb
bac
bca
cba
cab
来源:
此题与我原先发的穷举n位二进制数是一个原理。代码如下:
#include <stdio.h>
void sort(int m,int n,char b[])
{
int i;
char temp;
if(m==n-1)
{
for(i=0;i<n-1;i++)
printf("%c",b[i]);
printf("%c\n",b[n-1]);
}
else
{
for(i=m;i<n;i++)
{
temp=b[m];
b[m]=b[i];
b[i]=temp;
sort(m+1,n,b);
temp=b[m];
b[m]=b[i];
b[i]=temp;
}
}
}
int main()
{
void sort(int m,int n,char b[]);
int n,i;
char a[100];
scanf("%d",&n);
for(i=0;i<n;i++)
a[i]=97+i;
a[n]='\0';
sort(0,n,a);
return 1;
}