数的全排列

来源:互联网 发布:2010科比总决赛数据 编辑:程序博客网 时间:2024/05/18 16:36
问题:从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 15int 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;}