八皇后

首先通过 八皇后问题 求解出所有的结果,然后将每一个结果转化为一个八位的整数(算是本题的一个亮点吧

将这些八位的整数集进行排序,然后依据输入输出相应的答案。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 const int N=10;
 7 int a[N],ans[100],sum;
 8 void print(){
 9     int res=0;
10     for(int i=1;i<=8;i++){
11         for(int j=1;j<=8;j++)
12             if(a[j]==i){
13                 res=res*10+j;
14                 break;
15             }
16     }
17     ans[sum++]=res;
18 }
19 bool check(int x,int d){
20     for(int i=1;i<d;i++){
21         if(a[i]==x||x-a[i]==d-i||x-a[i]==i-d)
22             return 0;
23     }
24     return 1;
25 }
26 void solve(int d){
27     if(d==9){
28         print();
29         return;
30     }
31     for(int i=1;i<=8;i++){
32         if(check(i,d)){
33             a[d]=i;
34             solve(d+1);
35         }
36     }
37 }
38 bool compare(int x,int y){
39     return x<y;
40 }
41 int main(){
42     solve(1);
43     sort(ans,ans+sum,compare);
44     int n,t;
45     cin>>n;
46     while(n--){
47         cin>>t;
48         cout<<ans[t-1]<<endl;
49     }
50     return 0;
51 }
额外收获:
  • 可以为sort函数(来自头文件algorithm)指定一个函数实参,排序的顺序(正序、逆序)依据这个函数