- 论坛徽章:
- 5
|
很奇怪,为什么没有一个人对我贴的网址感兴趣呢……那我直接贴代码好了:- #include <stdio.h>
- static void cswap(char *a, char *b) {
- char tmp = *a;
- *a = *b;
- *b = tmp;
- }
- static void creverse(char *begin, char *end) {
- while (begin < end)
- cswap(begin++, --end);
- }
- static char *csort(char *s) {
- char *i = s;
- for (; *i != '\0'; ++i) {
- char tmp = *i, *j = i, *cur;
- while (s < (cur = j--) && !(*j < tmp))
- *cur = *j;
- *cur = tmp;
- }
- return i;
- }
- static int next_permutation(char *begin, char *end) {
- char *i = end-1;
- while (begin < i) {
- char *cur = i--;
- if (*i < *cur) {
- char *j = end;
- while (!(*i < *--j))
- ;
- cswap(i, j);
- creverse(cur, end);
- return 1;
- }
- }
- /*creverse(begin, end);*/
- return 0;
- }
- int main(void)
- {
- char buf[101];
- while (gets(buf) != NULL) {
- char *bufend = csort(buf);
- do {
- printf("%s\n", buf);
- } while (next_permutation(buf, bufend));
- }
- return 0;
- }
复制代码 |
|