hdu 1027(全排列)

 1 #include<iostream>
 2 #include<algorithm>  //next_permutation的函数声明
 3 #include<stack>
 4 #include<queue>
 5 using namespace std;
 6 int main()
 7 {
 8     int i,j,k,n,m;
 9     int a[1111];
10     while(~scanf("%d %d",&n,&m))
11     {
12         for(i = 0;i <n;i ++)
13         {
14             a[i] = i+1;
15         }
16         for(i = 2;i <=m;i ++)
17         {
18             next_permutation(a,a+n);
19         }
20         for(i = 0;i<n-1;i ++)
21         {
22             printf("%d ",a[i]);
23         }
24         printf("%d
",a[i]);
25     }
26     return 0;
27 }
View Code

//hdu 1027
//全排列,输出第M小的数

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<stack>
 4 #include<queue>
 5 #include<list>
 6 #include<vector>
 7 using namespace std;
 8 
 9 int main()
10 {
11     int i,j,k,n,m,q;
12     int a[1111];
13     while(~scanf("%d %d",&n,&m))
14     {
15         a[0] = 0;
16         for(i = 1;i <=n;i ++)
17         {
18             a[i] = i;
19         }
20         for(i = 2;i <= m;i ++)
21         {
22             j = n;
23             while(a[j] < a[j -1]) // 找出可交换的位置
24             {
25                 j --;
26             }
27             if(j == 1)
28             {
29                 for(k = 1;k <=n;k ++)
30                 {
31                     a[k] = k;
32                 }
33             }
34             else
35             {
36                 for(k = n;k >= j;k --) // 从后面找到第一个比a[j -1]的数,进行交换。
37                 {
38                     if(a[k] >a[j - 1])
39                     {
40                         int t =a[k];
41                         a[k] = a[j -1];
42                         a[j - 1] = t;
43                         break;
44                     }
45                 }
46                 sort(a+j,a+1+n);//将后几位排序
47             }
48         }
49         for(i = 1;i < n;i ++)
50         {
51             printf("%d ",a[i]);
52         }
53         printf("%d
",a[n]);
54     }
55     return 0;
56 }
View Code
原文地址:https://www.cnblogs.com/ypacm/p/6067033.html