题意:输出一个排列的后继排列,如果是最大的降序排列,则输出没有后继。
思路:调用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; }
时间: 2024-09-26 23:06:10