问题描述
0、1、2三个数字的全排列有六种,按照字母序排列如下:
012、021、102、120、201、210
输入一个数n
求0~9十个数的全排列中的第n个(第1个为0123456789)。
输入格式
一行,包含一个整数n
输出格式
一行,包含一组10个数字的全排列
样例输入
1
样例输出
0123456789
数据规模和约定
0 < n <= 10!
分析next_permutation函数执行过程: 假设数列 d1,d2,d3,d4…… 范围由[first,last)标记,调用next_permutation使数列逐次增大,这个递增过程按照字典序。例如,在字母表中,abcd的下一单词排列为abdc,但是,有一关键点,如何确定这个下一排列为字典序中的next,而不是next->next->next…… 若当前调用排列到达最大字典序,比如dcba,就返回false,同时重新设置该排列为最小字典序。 返回为true表示生成下一排列成功。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
int main( )
{
int n,i;
int arr[10]={0,1,2,3,4,5,6,7,8,9};
scanf("%d",&n);
for(i=1;i<n;i++)
{
next_permutation(arr,arr+10);//全排列函数
}
for(i=0;i<10;i++)
{
printf("%d",arr[i]);
}
return 0;
}