7-109 输出全排列 (20分)
输入样例:
3
输出样例:
123
132
213
231
312
321
具体AC代码如下:
#include <bits/stdc++.h>
using namespace std;
int a[20];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++) a[i]=i;
do{
for(int i=1;i<n;i++) cout<<a[i];
cout<<a[n]<<endl;
}while(next_permutation(a+1,a+1+n));
return 0;
}
拓展
解决全排列问题,next_permutation(a,a+n)是个很好的函数。
不仅可以解决本题,也可以解决字符串排列的问题,包括就有相同字符的字符串全排列问题,如abbc的全排列,其中还有重复元素b;
代码如下:
#include <bits/stdc++.h>
using namespace std;
int main(){
char a[]={"abbc"};
int len=strlen(a);
do{
for(int i=0;i<len;i++) cout<<a[i];
cout<<endl;
}while(next_permutation(a,a+len));
return 0;
}
string类型字符串全排列代码:
#include <bits/stdc++.h>
using namespace std;
void Permutation(string str) {
if (str.length() == 0) return;
// sort(str.begin(), str.end()); 想要全排列就先 sort 即可
while (next_permutation(str.begin(), str.end()))
cout << str << endl;
cout << "when finished, str = " << str << endl;
}
int main() {
string str{ "123" };
Permutation(str);
}
另注意:
- 使用全排列函数前要先对数组排序,推荐使用sort函数;
- 使用do while结构的循环
欢迎大家批评改正!!!