您的位置:首页 > 其它

算法提高 排列数

2017-03-11 19:56 169 查看
算法提高 排列数

时间限制: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 <cstdio>
#include<stdlib.h>
#include <algorithm>
#include <string.h>
#include <iostream>
using namespace std;
int vist[20];
int a[20];
long long sum;
long long n;
void dfs(int s)
{
if(s==10)
{
sum++;
if(sum==n)
{for(int i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
}
}
else
{
for(int i=0;i<=9;i++)
{
if(!vist[i])
{
vist[i]=1;
a[s]=i;
dfs(s+1);
vist[i]=0;
}
}
}
}
int main()
{
while(scanf("%lld",&n)!=EOF)
{
memset(vist,0,sizeof(vist));
sum=0;
dfs(0);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: