题意:输出一个排列的后继排列,如果是最大的降序排列,则输出没有后继。
思路:调用STL中的next_permutation()函数即可。不过这个函数在求后继时是一个循环状态,即全升序是全降序的后继,循环回来了。所以在调用之前判断一下是否为全降序序列即可。 感觉用这个函数没什么技术含量,有时间用纯C写一个。
Code:
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
char code[70];
int main()
{
while(scanf("%s",code)==1 && code[0]!='#')
{
int len=strlen(code);
bool flag=1;//是否为降序
for(int i=0;i<len-1;++i)
if(code[i]<code[i+1]) { flag=0; break;}
if(flag) printf("No Successor\n");
else
{
next_permutation(code,code+strlen(code));
printf("%s\n",code);
}
}
return 0;
}