其实做了10098后,在做这个就好好理解一点了。
这个题刚开始没看懂什么意思 郁闷了好久才明白过来。 从后向前 一部分一部分 的字典序,我是这样理解的。
举个例子吧:
aabbc
aabcb
aacbb
ababc
abacb
abbac
abbca
abcab
abcba
acabb
acbab
acbba
看完这个例子应该能明白 这个题的意思了吧 不明白的话我也没办法了...
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char a[55],b[55];
int cmp(const void *p,const void *q)
{
return strcmp((char *)p,(char *)q);
}
int main()
{
int i,j,len,flag;
while(gets(a))
{
if(a[0]=='#')break;
memset(b,0,sizeof(b));
len=strlen(a);
flag=1;
for(i=len-1; i>0; i--)
if(a[i]>a[i-1])
flag=0;
if(flag)
puts("No Successor");
else
{
char temp;
for(i=len-1; i>0; i--)
if(a[i]>a[i-1])
{
for(j=i; j<len; j++)
if(a[i-1]>=a[j])
break;
temp=a[i-1];
a[i-1]=a[j-1];
a[j-1]=temp;
break;
}
for(j=i; j<len; j++)
b[j-i]=a[j];
b[j-i]='\0';
a[i]='\0';
qsort(b,strlen(b),sizeof(b[0]),cmp);
strcat(a,b);
puts(a);
}
}
return 0;
}