全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,
便于区分出考生的水平。所以在百度和迅雷的校园招聘中都会考到。。
首先来看看题目是如何要求的(百度迅雷校招笔试题)。
题目:用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列, 如 abc 的全排列:
abc, acb, bca, dac, cab, cba。。
Code
#include<bits/stdc++.h>
using namespace std;
#define Max 100
int n,p[Max],flag[Max]={false};
void generatep(int index){
if(index==n+1){
for(int i=1;i<=n;i++){
printf("%d ",p[i]);
}
cout<<endl;
return;
}
for(int x=1;x<=n;x++)
{
if(flag[x]==false){
p[index] =x;
flag[x]=true;
generatep(index+1);
flag[x] =false;
}
}
}
int main(){
n=3;
generatep(1);
return 0;
}
结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200816161135633.PNG#pic_center)