当前位置: 代码迷 >> 综合 >> uva-146 - ID Codes
  详细解决方案

uva-146 - ID Codes

热度:50   发布时间:2023-12-19 11:36:14.0

恩,一道规律题。

对于一个字符串,先从后往前找,找到一个字母比他后面的那么字母小的,这个字母就应该替换掉。

再从后往前找,如果一个字母比被替换掉的字符大,那么就交换这两个字母。

输出的时候先按顺序输出被替换掉字母前的字符。

然后逆序输出之后的字符。

#include<stdio.h>
#include<string.h>
int main()
{int i,n,j;char str[100],ipos;while(gets(str)&&(str[0]!='#')){n=strlen(str);if(n==1){printf("No Successor\n");continue;}i=n-2;while(i!=-1&&str[i]>=str[i+1])i--;if(i==-1){printf("No Successor\n");continue;}j=n-1;while(str[j]<=str[i])j--;ipos=str[i];str[i]=str[j];str[j]=ipos;for(j=0;j<=i;j++)printf("%c",str[j]);for(j=n-1;j>i;j--)printf("%c",str[j]);printf("\n");}return 0;
}