康拓展开
我借着学的。
原链接:https://blog.csdn.net/ltrbless/article/details/87696372
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cmath> 5 #include<vector> 6 using namespace std; 7 #define ll long long 8 int a[5]={5,2,4,1,3}; 9 ll jcc[20]; 10 vector<char>vec; 11 void jc()//打表 12 { 13 jcc[0]=1; 14 for(ll i=1;i<=16;i++){ 15 jcc[i]=jcc[i-1]*i; 16 } 17 } 18 ll kangtuo() 19 { 20 ll ans=1; 21 for(int i=0;i<5;i++){//5为jcc长度 22 int t=0; 23 for(int j=i+1;j<5;j++){ 24 if(a[i]>a[j])t++; 25 } 26 ans+=t*jcc[5-i-1]; 27 } 28 return ans; 29 } 30 void rekangtuo(ll k) 31 { 32 string s; 33 int n=vec.size(); 34 k--; 35 for(int i=1;i<=n;i++){ 36 int t=k/jcc[n-i]; 37 k%=jcc[n-i]; 38 s+=vec[t]; 39 vec.erase(vec.begin()+t); 40 } 41 cout<<s<<endl; 42 } 43 int main() 44 { 45 jc(); 46 ll ans=kangtuo(); 47 cout<<ans<<endl; 48 int num; 49 for(int i=1;i<=16;i++){ 50 if(ans/jcc[i]==0){//找逆展开最小位数 51 num=i; 52 break; 53 } 54 } 55 for(int i=1;i<=num;i++){ 56 vec.push_back(i+'0'); 57 } 58 rekangtuo(ans); 59 }

浙公网安备 33010602011771号