链接:https://www.nowcoder.com/acm/contest/76/H
来源:牛客网
题目描述:
老李见和尚赢了自己的酒,但是自己还舍不得,所以就耍起了赖皮,对和尚说,光武不行,再来点文的,你给我说出来1-8的全排序,我就让你喝,这次绝不耍你,你能帮帮和尚么?
输入描述:
无
输出描述:
1~8的全排列,按照全排列的顺序输出,每行结尾无空格。
示例1
输入
No_Input
输出
Full arrangement of 1~8
备注:
1~3的全排列 : 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
解法一:用封装函数next_permutation。点击查看next_permutation函数的原理与使用
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int ans[8]={1,2,3,4,5,6,7,8};
sort(ans,ans+8);
do
{
for(int i=0;i<8;i++)
{
if(i!=0) printf(" ");
printf("%d",ans[i]);
}
printf("
");
}while(next_permutation(ans,ans+8));
return 0;
}
解法二:利用递归#include<stdio.h>
#include <iostream>
using namespace std;
bool p[10];
int a[10];
int cnt=0;
void dfs(int k){
if (k>8){
for (int i =1 ; i <= 7 ; i ++ )
printf("%d ",a[i]);
printf("%d
",a[8]);
return ;
}
for (int i = 1 ; i <= 8 ; i ++ )
if (!p[i]){
p[i]=1;
a[k]=i;
dfs(k+1);
p[i]=0;
}
}
int main(){
dfs(1);
return 0;
}