题目链接:http://poj.org/problem?id=1146
此题求所给字符串按字典序的下一个由原串字母排列的串,题目不难,开始看错了,wrong一次
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char** argv) { char a[55],temp; int k,i,j,flag,t; while(scanf("%s",a)&&a[0]!='#') { flag=-1; k=strlen(a); t=k-1; for(i=k-2;i>=0;--i) { if(a[i]>=a[t]) { t=i; } else { if(a[k-1]>a[i]) { flag=k-1; } else { for(j=t;j<k;j++) { if(a[j]<=a[i]) { flag=j-1; break; } } } break; } } if(flag==-1) { printf("No Successor\n"); } else { temp=a[i]; a[i]=a[flag]; a[flag]=temp; for(j=0;j<=i;j++) { printf("%c",a[j]); } for(j=k-1;j>=i+1;--j) { printf("%c",a[j]); } printf("\n"); } } return (EXIT_SUCCESS); }
代码: