fork download
  1. #include <string.h>
  2. #include <stdio.h>
  3. void rev(char *b, char *e) {
  4. char c;
  5. for (e--; b < e; b++, e--) c = *b, *b = *e, *e = c;
  6. }
  7. char *f(char *s, int n) {
  8. char c, *p, *q, *e = s + strlen(s);
  9. while (0 < --n)
  10. for (p = e - 2; s <= p; p--)
  11. if (p[0] < p[1]) {
  12. for (q = e - 1; p < q && *q <= *p; q--);
  13. c = *p;*p = *q;*q = c;
  14. rev(p + 1, e);
  15. break;
  16. }
  17. return s;
  18. }
  19. int main() {
  20. char buff[64];
  21. #define g(s, n) printf("%s\n", f(strcpy(buff, (s)), (n)))
  22. g("123456789", 1);
  23. g("123456789", 2);
  24. g("123456789", 3);
  25. g("123456789", 123456);
  26. g("123456789", 234567);
  27. g("123456789", 362880);
  28. g("111222333444", 1);
  29. g("111222333444", 2);
  30. g("111222333444", 3);
  31. g("111222333444", 123456);
  32. g("111222333444", 234567);
  33. g("111222333444", 3369600);
  34. #undef g
  35. return 0;
  36. }
  37.  
Success #stdin #stdout 0.03s 5284KB
stdin
Standard input is empty
stdout
123456789
123456798
123456879
416589732
684753219
987654321
111222333444
111222334344
111222334434
222331434114
324424331112
444333222111