#include <iostream> #include <fstream> #include <string> #include <time.h> #include <list> using namespace std; void getorder(list<int>&p,list<int>&r); int main() { double start = clock(),end(0); int a[] = {0,1,2,3,4,5,6,7,8,9}; list<int> rank; list<int> permutation(a,a+10); unsigned int n = 1000000; unsigned int x = 10; //得到各阶层系数 while(n != 0) { unsigned int level = 1; unsigned int t = 1; for(int i = 1 ; i!= x;i++) { level *= i; } while (level * t <= n) { t++; } rank.push_back(t-1); n -= level * (t-1); x--; } //全排列组合 for(int i=1;i<9;++i) { getorder(permutation,rank); } //结果显示 for(list<int>::iterator iter = rank.begin();iter!=rank.end();iter++) cout << *iter <<endl; end = clock(); double result = (end - start)/1000; cout.setf(ios::fixed); cout <<endl<< "3.00GHz's run time = " << result << "s."<<endl; return 0; } void getorder(list<int>&p,list<int>&r) { list<int>::iterator riter = r.begin(); list<int>::iterator piter = p.begin(); unsigned order = *riter; r.erase(riter); while(order!=0) { piter++; --order; } r.push_back(*piter); p.erase(piter); } #include <iostream> #include <algorithm> using namespace std; int main() { char ca[]="0123456789"; for(int i=1;i<1000000;i++) next_permutation(ca,ca+10); cout << ca << endl; system("pause"); }