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; }