其实做了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;
}
本文解释了如何通过从后向前、部分字典序的方法理解特定字符串序列的排列规则,并提供了一个实例帮助读者理解该过程。同时,展示了通过C语言实现的算法来找到可能的后续字符串排列。
259

被折叠的 条评论
为什么被折叠?



