prev_permutation是C++ STL中的<algorithm>库里的一个函数。它的功能是计算一个数组的给定的第一个数到最后一个数按照字典序所得的上一个排列。如果这个排列存在,那么就return这个排列,否则就return一个bool值false。
下面是题目:
【题目描述】
情人节到了,Uim打算给他的后宫们准备情人节礼物。UIm一共有N(1<=N<=9)个后宫妹子(现充去死 挫骨扬灰!)。
为了维护他的后宫的稳定。他通过编程,得出了一个送礼物的最佳顺序。这个我们管不着。
然而他认为,如果什么事情做得太圆满不是什么好事。于是他希望得到 原定顺序 的 前一个字典序的序列。
这个题应该就是上面函数的板子题。首先,我们先定义好头文件(不要忘记algorithm),定义好数组并进行读入,就像这样:
#include<iostream> #include<algorithm> using namespace std; int n,i; int num[10]; int main(){ cin>>n; for(i=1;i<=n;i++){ cin>>num[i]; return 0; }
接下来,我们只需要调用函数,如果函数返回了false,那么就输出“ERROR”,否则就顺序输出数组。
完整的代码:
#include<iostream> #include<algorithm> using namespace std; int n,i; int num[10]; int main(){ cin>>n; for(i=1;i<=n;i++){ cin>>num[i]; if(prev_permutation(num+1,num+n+1)==false){//没有上一个排列 cout<<"ERROR"<<endl; return 0; }else{//不用再次调用,因为如果存在则数组已经改变。 for(i=1;i<=n;i++){ cout<<num[i]<<' '; } } return 0; }
这样就可以AC了!
最后说一句,STL大法好!