next_permutation函数
STL提供求下一个排列组合的函数next_permutation。例如字符a,b,c可按字典序返回abc、acb、bac、bca、cab、cba这6个组合。
函数的使用方式
(1)next_permutation(first,last) \\包括first,不包括last
(2)next_permutation(first,last,cmp)
返回值:如果有下一个排列组合返回true,否则fales,每次执行完该函数会把新的排列存到原空间。
在使用该函数时,初始序列一般使用一个字典序最小的。
[问题描述]
对n个元素进行全排列。这n个元素由小写字母组成,这n个元素中的某些可能相同
[输入格式] 1<=n<=500
[输出格式]
每行一个序列,按字典序输出最后一行输出方案数
[输入样例]
4
aacc
[输出样例]
aacc
acac
acca
caac
caca
ccaa
6
代码
#include <bits/stdc++.h>
using namespace std;
bool cmp(char &a,char &b)
{
return a<b;
}
int main()
{
int n;
cin>>n;
char arr[n];
for(int i=0; i<n; i++) cin>>arr[i];
sort(arr,arr+n,cmp);
int ct=0;
do
{
for(int i=0; i<n; i++) cout<<arr[i];
cout<<endl;
ct++;
}
while(next_permutation(arr,arr+n));
cout<<ct<<endl;
return 0;
}