题意:求比这个序列大的下一个序列,其实如果没有下一个序列的话,也就证明了序列已经从大到小排序了,所以我们只要从后往前找到一个比它前面大的字符,那么就证明还可一生成下一个序列
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
char a[100],i,j;
while (gets(a) && a[0] != '#')
{
int n = strlen(a);
if ( n == 1)
{
cout<<"No Successor"<<endl;
continue;
}
i = n - 2 ;
while (a[i] >= a[i+1] && i != -1)
i--;
if ( i == -1 )
{
cout<<"No Successor"<<endl;
continue;
}
j = n - 1;
while ( a[j] <= a[i])
j--;
int t = a[i];
a[i] = a[j];
a[j] = t ;
for ( j = 0 ; j <= i ; j++)
cout<<a[j];
for (j = n - 1 ; j > i ; j--) // 已经保证从后往前是 <= 的了,思考一下
cout<<a[j];
cout<<endl;
}
return 0;
}