标签:
首先介绍一下next_permutation函数的用途!
按照STL文档的描述,next_permutation函数将按字母表顺序生成给定序列的下一个较大的排列,直到整个序列为降序为止。
prev_permutation函数与之相反,是生成给定序列的上一个较小的排列。
代码如下
#include<iostream> #include<algorithm> using namespace std; int main() { int a[] = {3,6,4,2}; do{ cout << a[0] << " " << a[1] << " " << a[2]<<" "<<a[3] << endl; } while (next_permutation(a,a+4)); //system("pause"); return 0; }
3,6,4,2 下一个序列为 4 2 3 6
观察第一个序列可以发现pn中的6 4 2已经为减序,在这个子集中再也无法排出更大的序列了,因此必须移动3的位置且要找一个数来取代3的位置。在6 4 2中6和4都比3大,但6比3大的太多了,只能选4。将4和3的位置对调后形成排列4 6 3 2。注意,由于4和3大小的相邻关系,对调后产生的子集6 3 2仍保持逆序,即该子集最大的一种排列。
题目
Description
Input
Output
Sample Input
Sample Output
#include<iostream> #include<algorithm> using namespace std; int main() { int n,m,a[1005]; while(cin>>n>>m){ for(int i=0;i<n;i++)a[i]=i+1; while(m-1){ next_permutation(a,a+n); m--; } for(int i=0;i<n;i++){ if(i!=n-1)cout<<a[i]<<" "; else cout<<a[i]<<endl; } } //system("pause"); return 0; }
标签:
原文地址:http://www.cnblogs.com/farewell-farewell/p/5208217.html