问题:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
公式:全排列数f(n)=n!(定义0!=1),如1,2,3三个元素的全排列为:
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
共3*2*1=6种。
输入一个数,打印出其全排列。
代码如下:
#include<cstdio>
#define Max 15
int n;
int a[Max],Book[Max];
//int count=0;
void dfs(int step)
{
if(step==n+1)
{
//if((a[1]*100+a[2]*10+a[3])+(a[4]*100+a[5]*10+a[6])==a[7]*100+a[8]*10+a[9]) //实现1-9当中满足 如123+456=789使等式成立的个数
//count++;
for(int i=1;i<=n;i++)
printf("%d",a[i]);
printf("\n");
return;
}
for(int x=1;x<=n;x++)
{
if(Book[x]==0)
{
a[step]=x;
Book[x]=1;
dfs(step+1);
Book[x]=0;
}
}
}
int main()
{
// n=9;
scanf("%d",&n);
for(int i=0;i<Max;i++)
{
Book[i]=0;
}
dfs(1);
//printf("%d",count);
return 0;
}