生成“下一个排列”
思想还是参见我的这篇文章
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char s[11];
int l, n;
int cmp(const void* a, const void* b) {
return *(char*)a - *(char*)b;
}
void swap(int l, int r) {
char t = s[l];
s[l] = s[r];
s[r] = t;
}
void reverse(int l, int r) {
for ( ; l<r ; l++, r--)
swap(l, r);
}
int main() {
scanf("%d", &l);
while (l--) {
int i=1, j;
scanf("%s", s);
n = strlen(s);
qsort(s, n, sizeof(char), cmp);
printf("%s\n", s);
while (i) {
for (i=n-1 ; i>0 ; i--)
if (s[i-1] < s[i]) {
for (j=i+1 ; j<n ; j++)
if (s[j] <= s[i-1])
break;
swap(i-1, j-1);
reverse(i, n-1);
printf("%s\n", s);
break;
}
}
printf("\n");
}
}