题解:P10901 [蓝桥杯 2024 省 C] 封闭图形个数
__galaxy_1202__ · · 题解
解题思路:
排序题,sort 自定义排序即可。
排序方法就照题目中的来,先定义一个表示每个数字大小的值,也就是封闭图形的个数(题目中已经有了,照打上去就行)。
接着按照先封闭图形的个数、后本身数值的大小从小到大排序,就完结撒花啦!
CODE:
#include <iostream>
#include <algorithm>
using namespace std;
int n, a[200001];
int num[10]{1, 0, 0, 0, 1, 0, 1, 0, 2, 1};//表
int sum(int x)//拆位计算
{
int ans = 0;
while (x)
{
ans += num[x % 10];
x /= 10;
}
return ans;
}
bool cmp (int a, int b)//cmp 自定义判断
{
int na = sum(a), nb = sum(b);
if (na != nb) return na < nb;
return a < b;
}
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] << ' ';
return 0;
}