/*
题意:有t组数据,每组有不超过13个字符的字符串,有大小写的区分顺序是'A'<'a'<'B'<'b'<...<'Z'<'z'.输出所有的全排列
按从小到大的顺序输出。
排序后像输出素数环一样输出,问题是怎样进行判重,加一个标记,但这个标记不递归下去,因为排序后相同的字符肯定在一块
当和标记不一样时,因为有for循环存在,所以不会再出现,所以就去掉重复的,因为是递归,所以每一层都有一个flag1,但每
一层的flag1的值是不一样的
*/
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node
{
char s;
int Rank;
}a[15];
bool cmp(node p,node q)
{
return p.Rank<q.Rank;
}
int len,flag[15];
char str1[15];
void dd(int k)
{
char flag1=1;
int i;
if(k==len)
{
str1[len]='\0';
puts(str1);
}
else
{
for(i=0;i<len;i++)
{
if(flag[i]==0)
{
if(a[i].s==flag1)
continue;
flag1=a[i].s;
flag[i]=1;
str1[k]=a[i].s;
dd(k+1);
flag[i]=0;
}
}
}
}
int main()
{
char str[15];
int t,i;
scanf("%d",&t);
while(t--)
{
scanf("%s",str);
len=strlen(str);
for(i=0;i<len;i++)
{
a[i].s=str[i];
if(str[i]>='a')
a[i].Rank=(str[i]-'a')*2+1;
else
a[i].Rank=(str[i]-'A')*2;
}
sort(a,a+len,cmp);
dd(0);
}
return 0;
}
/*
10
AAAAaZ
*/
题意:有t组数据,每组有不超过13个字符的字符串,有大小写的区分顺序是'A'<'a'<'B'<'b'<...<'Z'<'z'.输出所有的全排列
按从小到大的顺序输出。
排序后像输出素数环一样输出,问题是怎样进行判重,加一个标记,但这个标记不递归下去,因为排序后相同的字符肯定在一块
当和标记不一样时,因为有for循环存在,所以不会再出现,所以就去掉重复的,因为是递归,所以每一层都有一个flag1,但每
一层的flag1的值是不一样的
*/
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node
{
char s;
int Rank;
}a[15];
bool cmp(node p,node q)
{
return p.Rank<q.Rank;
}
int len,flag[15];
char str1[15];
void dd(int k)
{
char flag1=1;
int i;
if(k==len)
{
str1[len]='\0';
puts(str1);
}
else
{
for(i=0;i<len;i++)
{
if(flag[i]==0)
{
if(a[i].s==flag1)
continue;
flag1=a[i].s;
flag[i]=1;
str1[k]=a[i].s;
dd(k+1);
flag[i]=0;
}
}
}
}
int main()
{
char str[15];
int t,i;
scanf("%d",&t);
while(t--)
{
scanf("%s",str);
len=strlen(str);
for(i=0;i<len;i++)
{
a[i].s=str[i];
if(str[i]>='a')
a[i].Rank=(str[i]-'a')*2+1;
else
a[i].Rank=(str[i]-'A')*2;
}
sort(a,a+len,cmp);
dd(0);
}
return 0;
}
/*
10
AAAAaZ
*/