【欧拉计划】24. Lexicographic permutations

(本题取 $n=10$)

【思路】$\mathcal O(n!)$ 枚举所有排列情况,可用 DFS 实现或直接调用函数 next_permutation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
int a[10],cnt;
bool b[10];
void dfs(int k)
{
if(k>9)
{
if(++cnt==1000000)
{
for(int i=0;i<10;++i)printf("%d",a[i]);
exit(0);
}
return;
}
for(int i=0;i<10;++i)
{
if(b[i])continue;
a[k]=i;
b[i]=true;
dfs(k+1);
b[i]=false;
}
}
int main()
{
dfs(0);
return 0;
}
1
2
3
4
5
6
7
8
9
10
#include<bits/stdc++.h>
using namespace std;
int cnt,a[10];
int main()
{
for(int i=0;i<=9;++i)a[i]=i;
while(next_permutation(a,a+10)&&++cnt<999999);
for(int i=0;i<=9;++i)printf("%d",a[i]);
return 0;
}

【欧拉计划】24. Lexicographic permutations

https://hensier.github.io/projecteuler/24/

作者

hensier

发布于

2022-05-01

更新于

2023-01-02

许可协议

评论