题目描述
本质是一个排序问题,无非为排序添加两个条件,一个是封闭图形个数,另一个是在封闭图形个数相同的前提下,判断数值本身的大小。
对于封闭图形的处理,这里创建了一组偏移量进行计算,到时候直接带入就是对应的封闭图形个数,求和即可。
最后用sort排序,加一个自定义的比较器,结合封闭图形个数和数值判断。
C++ 代码
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+50;
int dx[] = {1,0,0,0,1,0,1,0,2,1}; //0~9的封闭图形个数
int g[N];
int check(int a)
{
int size=0;
while(a)
{
int temp = a%10;
a=a/10;
size+=dx[temp];
}
return size;
}
int main()
{
int n;
cin>>n;
for(int i = 1;i<=n;i++)
{
scanf("%d",&g[i]);
}
sort(g+1,g+1+n,[](int a,int b) //结合封闭图形和数值大小判断排序
{
if(check(a)<check(b)) return true;
if(check(a)==check(b)) return a<=b;
});
for(int i = 1;i<=n;i++)
{
printf("%d ",g[i]);
}
return 0;
}