#include <iostream> #include <numeric> #include <vector> using namespace std; vector<int> ithPermutation(int n, int i) { vector<int> r(n); i--; for (int j = 1; j <= n; j++) { r[n - j] = i % j; i /= j; } vector<int> a(n); iota(a.begin(), a.end(), 1); vector<int> p(n); for (int i = 0; i < n; i++) { p[i] = a[r[i]]; a.erase(a.begin() + r[i]); } return p; } template <typename T> ostream &operator<<(ostream &os, const vector<T> &v) { cout << "["; for (auto &x : v) os << (&x == &v[0] ? "" : ", ") << x; cout << "]"; return os; } int main(void) { for (int n : {1, 2, 3, 123456, 234567, 362880}) { cout << "入力: " << n << endl; cout << "出力: " << ithPermutation(9, n) << endl << endl; } return 0; }
Standard input is empty
入力: 1 出力: [1, 2, 3, 4, 5, 6, 7, 8, 9] 入力: 2 出力: [1, 2, 3, 4, 5, 6, 7, 9, 8] 入力: 3 出力: [1, 2, 3, 4, 5, 6, 8, 7, 9] 入力: 123456 出力: [4, 1, 6, 5, 8, 9, 7, 3, 2] 入力: 234567 出力: [6, 8, 4, 7, 5, 3, 2, 1, 9] 入力: 362880 出力: [9, 8, 7, 6, 5, 4, 3, 2, 1]