算法提高 排列数 (全排列)

Posted shixinzei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法提高 排列数 (全排列)相关的知识,希望对你有一定的参考价值。

问题描述
  0、1、2三个数字的全排列有六种,按照字母序排列如下:
  012、021、102、120、201、210
  输入一个数n
  求0~9十个数的全排列中的第n个(第1个为0123456789)。
输入格式
  一行,包含一个整数n
输出格式
  一行,包含一组10个数字的全排列
样例输入
1
样例输出
0123456789
数据规模和约定
  0 < n <= 10!
 
next_permutation方法
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <algorithm>
 6 #include <cmath>
 7 #include <queue> 
 8 using namespace std;
 9 
10 int main()
11 {
12     int n;
13     while(cin>>n){
14         int a[10]={0,1,2,3,4,5,6,7,8,9};
15         if(n==1) cout<<"0123456789"<<endl;
16         int t=1;
17         while(next_permutation(a,a+10)){
18             t++;
19             if(t==n){
20                 for(int i=0;i<10;i++) cout<<a[i];
21                 cout<<endl;
22                 break; 
23             }
24         }
25     }
26     return 0;
27 }

 

以上是关于算法提高 排列数 (全排列)的主要内容,如果未能解决你的问题,请参考以下文章

算法提高 排列数

回溯算法求关于排列有关问题

C语言数字全排列的问题(急!!)求C代码和算法

全排列的非递归算法

C++代码 递归算法 n个数的全排列 (是任意的,可不连续) 要求: 提示输入数的个数n 然后提示输入这n个

求n个数的全排列,n不定。用c语言。用于银行家算法中求安全序列