#include<bits/stdc++.h>
using namespace std;
const int N=200010;
int a[N];
int b[N];
pair<int, int >p[N];
int num[10]={1,0,0,0,1,0,1,0,2,1};
int pd(int n){
int sum=0;
while(n){
int x=n%10;
sum+=num[x];
n/=10;
}
return sum;
}
int cmp(pair<int,int>a,pair<int,int>b){
if(a.second!=b.second)return a.second<b.second;
else return a.first<b.first;
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>p[i].first;
p[i].second=pd(p[i].first);
}
sort(p,p+n,cmp);
for(int i=0;i<n;i++){
cout<<p[i].first<<" ";
}
return 0;
}
![](https://i-blog.csdnimg.cn/direct/71f1827cb2cb4652b150aa87fe1ee234.png)
学习了一下对于的pair的first,second利用sort中的自定义cmp,根据题目先对second进行排序,就是对每个数字的封闭图案数量进行排序,相同再对数字大小进行排序。num数组对0-9每个数字进行映射。