Lexicographic permutations
Problem 24
A permutation is an ordered arrangement of objects. For example, 3124 is one possible permutation of the digits 1, 2, 3 and 4. If all of the permutations are listed numerically or alphabetically, we call it lexicographic order. The lexicographic permutations of 0, 1 and 2 are:
012 021 102 120 201 210
What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?
Answer:
2783915460
Completed on Tue, 4 Jul 2017, 05:39
#include<bits/stdc++.h>
using namespace std;
set<int> st;
int jc[15];
int f(int k)
{
set<int>::iterator it=st.begin();
for(int i=0;i<k;i++) it++;
int z=*it;
st.erase(z);
return z;
}
int main()
{
for(int i=0;i<10;i++)
st.insert(i);
jc[0]=1;
for(int i=1;i<10;i++)
jc[i]=jc[i-1]*i;
int ans[15];
int x=1000000-1;
for(int i=9;i>=0;i--)
{
cout<<x/jc[i]<<endl;
ans[i]=f(x/jc[i]);
x%=jc[i];
}
for(int i=9;i>=0;i--)
cout<<ans[i];
cout<<endl;
}