还是题意理解不清,导致wa了2次,
题意理解了就好做了,几乎是照抄课本上的代码, 没意思:!
方法一:
生成可重集的排列:
代码如下:
#include
#include
#include
using namespace std;
char s[15];
void printf_permutation(int n, char *flag, int cur)
{
if(n==cur)
{
for(int i = 0; i < n; i++)
printf("%c",flag[i]);
printf("\n");
return;
}
for(int i = 0; i < n; i++)if(!i||s[i]!=s[i-1])
{
int c1 = 0, c2 = 0;
for(int j = 0; j < cur; j++)
if(flag[j]==s[i])c1++;
for(int j = 0; j < n; j++)
if(s[j]==s[i])c2++;
if(c1
方法二:
利用STL中的库函数-next_permutation()
代码如下:
#include
#include
#include
using namespace std;
int main ()
{
int n;
char p[15];
scanf("%d",&n);
while(n--)
{
scanf("%s",p);
int len = strlen(p);
sort(p,p+len);
do
{
printf("%s\n",p);
}
while(next_permutation(p,p+len));
puts("");
}
return 0;
}