0
点赞
收藏
分享

微信扫一扫

算法提高 排列数


  算法提高 排列数  


时间限制:1.0s   内存限制:256.0MB



    


问题描述



  0、1、2三个数字的全排列有六种,按照字母序排列如下:
  012、021、102、120、201、210
  输入一个数n
  求0~9十个数的全排列中的第n个(第1个为0123456789)。



输入格式



  一行,包含一个整数n



输出格式



  一行,包含一组10个数字的全排列



样例输入



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;
}

举报

相关推荐

0 条评论