您的位置:首页 > 其它

蓝桥杯_算法提高 排列数

2018-03-23 20:38 232 查看
问题描述  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 <algorithm>
#include <cstdio>
#include <cstring>
#include <map>
#include <queue>
#include <cmath>
#include <math.h>
#define INF 0x3f3f3f3f
#define Lson L,mid,rt<<1
#define Rson mid+1,R,rt<<1|1

using namespace std;
typedef long long ll;
const int MAXN = 101000;
int n,num;
bool flag = false;
int a[15];
int vis[15];
void Init()
{
memset(vis,0,sizeof(vis));
scanf("%d",&n);
num = 0;
}

void DFS(int x)
{
if(flag)
return ;
for(int i = 0;i <= 9;i ++)
{
if(vis[i] == false)
{
a[x] = i;
vis[i] = true;
DFS(x+1);
if(x == 9)
{
num ++;
if(num == n)
{
for(int i =0 ;i < 10;i ++)
printf("%d",a[i]);
printf("\n");
flag = true;
return ;
}
}
vis[i] = false;
}
if(flag)
return ;
}
}
void Solve()
{
DFS(0);
}

int main()
{
Init();
Solve();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  DFS 蓝桥杯