蓝桥杯 adv188 排列数

蓝桥杯 adv188 排列数

问题描述

0、1、2 三个数字的全排列有六种,按照字母序排列如下:

012、021、102、120、201、210

输入一个数 n

求 0-9 十个数全排列中的第 n 个(第 1 个为 0123456789)

输入格式

一行,包含一个整数 n

输出格式

一行,包含一组 10 个数字的全排列

样例输入

1

样例输出

0123456789

数据规模和约定

0<n<=10!

参考解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

int main() {
string s = "0123456789";
int n;
cin >> n;
do {
if (--n) {
cout << s;
break;
}
}while(next_permutation(s.begin(), s.end()));
return 0;
}

// 全排列函数
void permutation(string s, int i, int n) {
if (i == n) {
cout << s << endl;
++cnt;
}
else {
for (int j = i; j < n; ++j) {
swap(s[i], s[j]);
permutation(s, i+1, n);
swap(s[i], s[j]);
}
}
}

void permutation2(string s, vector<string> &res, int i, string tmp, vector<bool> used) {
if (i == s.size())
res.push_back(tmp);

for (int j = 0; j < s.size(); j++) {
if (!used[j]) {
used[j] = true;
tmp += s[j];
permutation2(s, res, i+1, tmp, used);
used[j] = false;
tmp.erase(tmp.end() - 1);
}
}
}

全排列介绍:https://wenku.baidu.com/view/8c79a2facc17552706220880.html

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×