(本题取 $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; }
|