Photolog
Back to list of problems
ID Codes
146.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#if 0
abaacb
cbbaa
#
Sample output
ababac
No Successor
#endif
static int
compar(const void *a, const void *b) {
return *(char*)a - *(char*)b;
}
static void
doit(char * str) {
int i,j,k;
char c;
int done = 0;
int len = strlen(str);
for (i=len-2; i>=0; i--) {
if (str[i] < str[i+1]) {
k = i+1;
for (j=i+1; j<len; j++) {
if (str[j] > str[i] && str[j] < str[k]) {
k = j;
}
}
c = str[i];
str[i] = str[k];
str[k] = c;
qsort(&str[i+1], len-i-1, 1, compar);
/* TODO */
done = 1;
break;
}
}
if (done) {
printf("%s\n", str);
} else {
printf("No Successor\n");
}
}
int
main(void) {
char str[100];
while (1) {
if (scanf("%s", str) != 1) {
break;
}
if (str[0]=='#') {
break;
}
doit(str);
}
return 0;
}









