题目链接:http://poj.org/problem?id=1256
排列问题,在头文件algorithm里有这么一个函数:next_permutation(),参数和sort()相同,就是求数组内元素的下一个排列,按照字典序的升序排列,也可以自定义比较函数cmp,与之相反的还有prev_permutation()。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char s[1000];
int cmp(const char& a, const char& b)
{
int x1 = a;
int x2 = b;
if (x1 >= 'A' && x1 <= 'Z')
x1 = (x1-'A')*2;
else
x1 = (x1-'a')*2+1;
if (x2 >= 'A' && x2 <='Z')
x2 = (x2-'A')*2;
else
x2 = (x2-'a')*2+1;
return x1 < x2;
}
int main()
{
int t;
scanf("%d",&t);
while (t > 0)
{
t--;
scanf("%s",s);
sort(s,s+strlen(s),cmp);
printf("%s\n",s);
while (next_permutation(s,s+strlen(s),cmp))
{
printf("%s\n",s);
}
}
return 0;
}