题目描述:
排列是一个物体的有序安排。例如3124是1,2,3,4的一种排列。如果所有的排列按照数值或者字母序排序,我们称其为一个字典序。0,1,2的字典排列有:
012 021 102 120 201 210
0, 1, 2, 3, 4, 5, 6, 7, 8,9的第100万个字典排列是什么?
本来并不知道怎么求出序列的全排列。看了一下一位大神的博客,居然有这么多的方法。我就用了最简单易懂的字典序法。
http://blog.youkuaiyun.com/visame/article/details/2455396


1 #include<iostream> 2 #include<string.h> 3 using namespace std; 4 5 char st[15] = "0123456789"; 6 int main() 7 { 8 int i , j , k , l , len , temp1; 9 char min , temp2; 10 len = strlen(st); 11 for(i = 1; i < 1000000; i++) 12 { 13 min = 58; 14 for(j = len-2; j >=0; j--) 15 { 16 if(st[j] <st[j+1]) 17 { 18 for(k = j+1; k < len; k++) 19 { 20 if(st[k] > st[j]) //找出比st[j]大的数中最小的一个 21 { 22 if(min > st[k]) 23 { 24 min = st[k]; 25 temp1 = k; 26 } 27 } 28 } 29 temp2 = st[j]; //交换 30 st[j] = st[temp1]; 31 st[temp1] = temp2; 32 for(k = j+1 , l = len-1; k <= l; k++ , l--) //倒转 33 { 34 temp2 = st[k]; 35 st[k] = st[l]; 36 st[l] = temp2; 37 } 38 break; 39 } 40 } 41 } 42 cout<<st<<endl; 43 return 0; 44 }