字典序排列
排列指的是将一组物体进行有顺序的放置。例如,3124是数字1、2、3、4的一个排列。如果把所有排列按照数字大小或字母先后进行排序,我们称之为字典序排列。0、1、2的字典序排列是:
012 021 102 120 201 210
数字0、1、2、3、4、5、6、7、8、9的字典序排列中第一百万位的排列是什么?
代码演示
#include <iostream>
using namespace std;
#define MAX_N 10
int fac[MAX_N];
int num[MAX_N];
void init(int n) {
fac[0] = 1, num[0] = 1;
for (int i = 1; i <= n; i++) {
fac[i] = i * fac[i - 1];
num[i] = 1;
}
return ;
}
int get_num(int k, int n, int &x) {
int step = k / n, t = 0;
x = 0;
for (int t = 0; t <= step; x += (t <= step)) {
t += num[x];
}
k %= n;
num[x] = 0;
return k;
}
int main() {
init(MAX_N);
int k = 1000000 - 1;
for (int i = MAX_N; i >0; i--) {
int x;
k = get_num(k, fac[i - 1], x);
cout << x;
}
cout << endl;
return 0;
}