问题描述
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;
}
本文介绍了一种算法,用于求解0到9这十个数字的全排列中的第n个排列,采用C++语言实现,利用next_permutation函数进行字典序排列。通过输入整数n,程序将输出相应的全排列。
383

被折叠的 条评论
为什么被折叠?



