这是做到的一道题
输入的每个字符串都是由小写字母组成的
对于输出是:输出输入字符串产生的所有排列,不能有重复的排列,而且按字典序输出,且每一种排列占一行。在每组连续的测试数据间输出空行。
测试了几组数据好像都是对的,但就是WA,不知道错在哪里了,下面是代码,各位可以帮忙看看吗?感激不尽!
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn = 1010;
char a[maxn];
bool flag = true;
int factorial(int n)
{
int fact = 1;
for(int i = 1; i <= n; i++)
{
fact = fact * i;
}
return fact;
}
void next_per(int n)
{
int temp1 = -1, temp2 = -1;
char min = 123;
flag = true;
for(int i = n-2; i>=0; i--)
{
if(a[i] < a[i+1])
{
temp1 = i;
break;
}
}
if(temp1 == -1)
{
flag = false;
return;
}
for(int i = temp1 +1; i<n; i++)
{
if(a[i] > a[temp1] && a[i] < min)
{
temp2 = i;
min = a[i];
}
}
swap(a[temp1],a[temp2]);
sort(a+temp1+1,a+n);
}
int main()
{
int cas, n;
scanf("%d",&cas);
while(cas)
{
scanf("%s",a);
n = strlen(a);
sort(a,a+n);
int fact = factorial(n);
for(int i = 1; i<=fact; i++)
{
if(flag == true)
printf("%s\n",a);
next_per(n);
}
flag = true;
cas--;
if(cas)
printf("\n");
}
return 0;
}