012、021、102、120、201、210
输入一个数n
求0~9十个数的全排列中的第n个(第1个为0123456789)。
0 < n <= 10!
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int a[10];//所要输出的元素
int visi[10];//标记,某一个元素释放被访问过
long long s = 0;//记录有几个数有值
long long n;//所以查找序列的第几个
void DFS(int pos){
if(pos==10){//说明每个数都有值
s++;
if(s==n){
for(int i=0;i<10;i++){
printf("%d",a[i]);
}
printf("\n");
}
}
for(int i=0;i<10;i++){
if(!visi[i]){//如果此元素没有被访问过,就对此元素进行赋值
a[pos] = i;
visi[i] = 1;
DFS(pos+1);
visi[i] = 0;
}
}
}
int main()
{
while(scanf("%I64d",&n)!=EOF){
memset(visi,0,sizeof(0));
DFS(0);
}
return 0;
}