就预处理每个数字封闭区间为多少个,然后写个得到一个数封闭区间的函数,然后排个序就好
#include<bits/stdc++.h>
using namespace std;
#define N 1000010
int n;
int a[N];
int cnt[]={1,0,0,0,1,0,1,0,2,1};
int get_cnt(int n){
int res=0;
while(n){
res+=cnt[n%10];
n/=10;
}
return res;
}
bool cmp(int a,int b){
int ca=get_cnt(a),cb=get_cnt(b);
if(ca==cb)return a<b;
return ca<cb;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)cout<<a[i]<<" ";cout<<endl;
return 0;
}